WindowsServer2016のAD CSサーバを使ってオレオレ認証局を作ってみた理由。
1、IIS7.5以降ではオレオレ証明書(自己認証証明書)にIPアドレスが指定できない。※Apacheなどは未だにOK。
2、自分で作ったドメインなら配布もポリシーでされて自動で認証され、オレオレ(自己認証証明書)ではない本物もどきの証明書が出来る。
3、どうせやるなら、本物に近いオレオレ証明書(自己認証証明書)を作りたい。
と言うことでやってみたが、セキュリティの非常に肝な部分のため明確にやり方を示す情報サイトはなかった。
どうやらWindowsServerに搭載されたAD CSは同じドメイン内(AD内)では安全に運用出来る方法らしい。
社内アクティブディレクトリのポリシー配布の機能を併用するとドメイン内では外のインターネットSSLサイトと同じように証明書が自動的に配布され、ドメイン外のユーザーからは証明書を別途頂かないとアクセスすることが出来ない環境を作ることが出来るようだ。この事も考慮しないと間違ったAD CSを作ってしまうので注意しよう。
AD CSサーバの構築場所:
ADサーバにAD CSサーバを共存させることも可能であるが、共存の場合は、モジュールのインストール順序を間違えると一旦AD CSをクリーンアンインストール(証明書の管理からも削除が必要)する必要が発生するので、ADサーバとは別のいわゆるADメンバーサーバーが理想的である。メンバーサーバーでもWebサーバとして使うサーバは証明機関Web登録のURLの設定がIISを使う関係で難しくなるのでWebサーバ以外がお勧め。実際に私は共存を検証しているが予測不能な事態をたくさん解決する必要が発生するのでお勧めできない。
さて構築場所が決まったら、AD CSサーバの構築:
1、エンタープライズ証明機関
2、ルートCA
3、資格情報はこのADドメインの管理者アカウント(大抵はAdministrator)
4、ドメイン名はADドメインのものをつかい、それに適当なサフィックスを付ける形になる。
※これも何度か入れ直しをするとどういう仕組みなのか分かるはず
5、必要な機能は証明機関、証明機関Web登録
※証明機関Web登録:これ入れないと簡単な証明書登録画面を出せなくなる証明書登録はWebアプリ(/certsrv)で行う
これでAD CSのインストールは終わるが、これだけでは、証明書登録Web画面(http://~/certsrv)へのアクセスが出来ない事がある。
私の環境では特に問題はなかったが、HTTPではアクセス出来ないバージョンがありその場合は下記でHTTPS対応をする。
6、MMC証明書スナップインを起動し個人証明書で新しい証明書の要求をする。
7、IISの管理画面で、「バインド編集」を行い、HTTPSを追加し、6で作成した証明書を選択する。
8、これでhttps://~/certsrvにアクセス出来るはず。
これでAD CSサーバ構築は簡単に終わる。
このAD CSで作成される証明書は認証局発行の正式な証明書には当たり前に付いているSAN情報がデフォルトでは付加できない。
AD CSサーバでコマンドプロンプトを開き、
certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
net stop certsvc
net start certsvc
でSAN属性が設定出来るようになる。
※certutil -getreg policy\EditFlags(現在の証明書属性を表示出来る)
※certutil -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2(属性削除)
証明書登録方法:
証明機関Web登録画面を、一般の証明書購入時の認証局の役割として考え、証明書発行したいサーバのIISでSSL証明書発行要求を作り、これを、証明機関Web登録画面で入力する。
注意点は発行要求を出す際にFQDN指定は必須になるが、これは、フレンドリ名と一致していないと呼び出すURLのFQDN名をフルFQDNで指定することになったり、サフィックスでフィルターしたりする必要が出るのでややこしくなる。
またSAN属性は付加されるように上記で設定されているが、証明書にSAN属性を追加するのは別途必要。
追加属性欄に san:dns=XXX.example.com&dns=xxx.example のように記述する。これ大事。
証明書は、ほぼすぐに発行されるが、発行されたら、証明機関Web登録画面からダウンロードが必要で、配布したい形式でダウンロードすれば良い。
ダウンロードされた証明書は、ドメイン外の端末に手動でインストールして使う事も出来るが、その際は、どうしてもHostsなどの名前解決がされている必要があるので名前解決は工夫が必要。
この環境にすると、同一ドメイン内にいるクライアントPCにはこのSSL証明書を使うドメインのURLには自動で証明書を配信させる事が出来る。
※この設定で出来るのはこのようなローカルドメイン環境であり、ドメイン外のマシンでChrome、EdgeなどのブラウザでSSLアクセスすると2020年12月以降、これだけでは証明書警告が出るようになってしまった。この回避方法は下記に記載した。