Active Directory 証明書サービスで発行した証明書が Chrome だけエラーになる
こんにちは、じんないです。
HTTP 通信を暗号化するために、Active Directory 証明書サービスでサーバー証明書を発行し、Web サーバーに割り当てたのですが Google Chrome でアクセスしたときだけ証明書エラーとなりました。
Internet Explorer や Edge で接続したときはまったく問題ありませんでした。
環境
- Active Directory 証明書サービス: Windows Server 2012 R2
- エンタープライズ CA
- ルート CA
- Web サーバー: Windows Server 2019 (IIS 10)
- クライアント: Windows 10 (1809)
- Chrome: 80.0.3987.163
クライアントにはルート CA の証明書を、Web サーバーにはルート CA が発行した証明書をそれぞれインポートしています。
エラー内容
目的の URL にアクセスすると、この接続ではプライバシーが保護されません と表示され証明書エラーになります。
そして、エラーメッセージには NET::ERR_CERT_COMMON_NAME_INVALID
と表示されています。
下記のサイトによると Chrome では SAN (Subject Alternative Name) 属性の値とアクセス先のドメインを検証し、一致していない場合はエラーとなるようです。
実際に証明書を確認すると SAN 属性はありませんでした。
Google Chrome で自組織のCAで署名したSSL証明書のサイトにアクセスすると NET::ERR_CERT_COMMON_NAME_INVALID エラーメッセージが表示される
SAN 属性を持った証明書の発行手順
証明書要求から SAN 属性を受け付けるようにする
デフォルトの設定では SAN 属性が付与されないので、CA の設定を変更します。仮に証明書要求に SAN 属性が含まれていても、除外されるようです。
コマンドプロンプトで以下のコマンドを実行します。
certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
net stop certsvc
net start certsvc
証明書を要求する
Active Directory 証明書サービスにアクセスし、[証明書を要求する] をクリックします。
※ CSR の作成は済んでいるものとして割愛します。
[証明書の要求の詳細設定] をクリックします。
下側の長い名前の方をクリックします。
作成した CSR の内容を張り付けて、追加属性のところに san:dns=<web サーバーの FQDN>
を指定します。
複数の DNS 名やエイリアスがある場合は &
でつなげて指定します。
san:dns=<web サーバーの FQDN>&dns=<web サーバーの FQDN>
あとは発行された証明書を Web サーバーにインポートし、バインドすれば OK です。
これで Chrome に怒られなくなりました。
証明書のプロパティを見てみると サブジェクト属性
という項目があり DNS Name
がはまっていることが確認できます。
Active Directory 証明書サービスを使って証明書を発行する際は気を付けないといけませんね。
ではまた。
参考
セキュリティで保護された LDAP 証明書にサブジェクトの別名を追加する方法
Google Chrome で自組織のCAで署名したSSL証明書のサイトにアクセスすると NET::ERR_CERT_COMMON_NAME_INVALID エラーメッセージが表示される