事象
Chrome58以降では、CNの名前とリクエストしたホスト名が一致しても安全な接続とはみなさず、ERR_CERT_COMMON_NAME_INVALID が返される。例えば CN=localhost で発行した証明書で、https://localhost でアクセスした場合のこと
理由
Chrome58以降は、証明書V3の拡張領域:DNS名でも検証している。
Qiita:Chromeに怒られないオレオレ証明書の作り方
Keytoolでの対応と制約事項
keytoolで自己署名証明書を発行するときのオプションに、DNSも指定する。そのとき、ドメイン名は必ずA.B.CないしはA.B.C.Dのフォーマットになる。keytoolの制限で、ワイルドカードや .から始まる後方一致形式の指定はできないようだ。
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048
-ext san=dns:sample.localhost.com -keystore "tomcat.jks" -validity 3650
(実際は1行で)
キーストアのパスワードを入力してください:(キーストアのパスワード)
新規パスワードを再入力してください:(キーストアのパスワード)
姓名は何ですか。
[Unknown]: sample.localhost.com (検証用のホスト名)
組織単位名は何ですか。
[Unknown]: Capybara
組織名は何ですか。
[Unknown]: Capybara
都市名または地域名は何ですか。
[Unknown]: Shinagawa
都道府県名または州名は何ですか。
[Unknown]: Tokyo
この単位に該当する2文字の国コードは何ですか。
[Unknown]: JP
CN=sample.localhost.com, OU=Capybara, O=Capybara, L=Shinagawa, ST=Tokyo, C=JPでよろしいですか。
[いいえ]: y
発行後、このキーストア tomcat.jks を、任意のサーブレットコンテナに適用して起動すると良い。
その時に、sample.localhost.com を localhost(127.0.0.1) になるよう、hostsファイルへ登録しておく。