TL;DR
IPアドレス直打ち(e.g. https://192.168.1.1/ ) でアクセスするための証明書を作るときには、
下記にIPアドレスを設定しよう。
- CN (Common Name)
- SAN (Subject Alternative Name) DNS
- SAN IP
はじめに
IPアドレス直打ちでアクセスする、クローズドなウェブシステム構築時、
証明書検証エラーが発生しないサーバ証明書の作り方に四苦八苦したので、メモ。
(みんなこんなの常識なのかな・・・)
Internet Explorer のIPアドレスアクセス時の証明書検証手続き
- SAN が設定されていない場合
- CN がIPアドレスと一致しているかを検証、不一致ならエラー
- SAN が設定されている場合
- SAN DNS がIPアドレスと一致しているかを検証、不一致ならエラー
- IPではない!!
- SAN DNS がIPアドレスと一致しているかを検証、不一致ならエラー
Google Chrome のIPアドレスアクセス時の証明書検証手続き
- SAN IP が IPアドレスと一致しているかを検証、不一致ならエラー
まとめ
- Chromeが SAN をチェックし、CN を無視するのは有名だが、IE も(設定されていれば) SAN をチェックし、 CN を無視する。
- ただし、IEはIPアドレスでアクセスしていようが DNS 名で検証し、IP 名は無視する。
- Chrome はアクセスしているのがIPアドレスかドメインかを判別し、IP名 または DNS名 の適切な方で検証する。
- Firefox 等、他のブラウザは未調査。
というわけで
証明書には下記を設定しよう
- CN
- 互換性のために一応。
- SAN DNS
- IE に見てもらう用
- SAN IP
- Chrome に見てもらう用
感想
- Chromeはエラー無しで通すのにIEで検証エラーとなる場面に初めて出くわした。
- ていうかブラウザ間の証明書検証手順を統一してくれ!