ERR_CERT_COMMON_NAME_INVALIDでSAN追加、そして自己CA局で署名まで

投稿者: | 2019-09-04

期限切れのサーバー証明書を更新し、Firefoxで確認後、よしOK。
で帰宅後、連絡が入る。

「NET::ERR_CERT_COMMON_NAME_INVALID」となってアクセスできません。

は?

どうやらChromeだけらしい、、、
googleしてみると、たくさんヒット

Google Chrome で自組織のCAで署名したSSL証明書のサイトにアクセスすると NET::ERR_CERT_COMMON_NAME_INVALID エラーメッセージが表示される (Windows Tips)

SAN(Subject Alternative Name)というものが設定されていないとだめらしい。
(これって去年もハマったような・・・・orz)

更新前の証明書を調べると

確かにありました。

SAN(Subject Alternative Name) 【OpenSSL】SANでDNS情報を付与した証明書を作成する

に従って、作成しなおし!

[CentOS系] /etc/pki/tls/openssl.cnf
[Debian系] /usr/lib/ssl/openssl.cnf
のファイルの設定を変更

サーバー証明書の秘密鍵作成

証明書要求(CSR)ファイルを作成。v3_reqなどを追加編集し、openssl.cnfを独自に作成した場合は、明示的に指定したほうが良い。

作成されたCSRの中身を確認する。

中身を見たときに「Certificate Request:」となっていなければ、CA局の署名でエラーとなる。
(後で判明するがX509v3 Subject Alternative Nameは、自己CA局での署名時に、書き換えられてしまう。)

サーバ証明書要求(CSR)に自己認証CA局で署名

自己CA局のサーバーのopenssl.cnfの設定を上記と同じに設定する。

  • [req]セクションへの「req_extensions = v3_req」の有効化
  • [v3_req]セクションへの「subjectAltName = @alt_names」追加
  • [alt_names]セクションの追加

署名を実施すると、たぶん下記のエラーとなる。

この場合は、CA局のディレクトリー内のnewcertsディレクリーにある最新版をrevokeすると解消される。
(※. ちなみにopenssl.cnfは独自のものを利用するので、opensslコマンドでは -cofigオプションで指定)

署名を実施する。
opensslのコマンドに「-config openssl.cnf」と「-extensions v3_req」を付加することを忘れずに!
(ちなみに、この-extensions v3_reqで、書き換えられてしまう)

署名済みのCERTの中身を確認

問題なければ、署名済みのCERTを元のサーバーに転送し、そちらのapacheないしnginxのconfに組み込めば完了。

今回のはまりポイントは、

  • 自己CA局で署名する際にv3_reqがないとSANが消えてしまう。しかも、そのサーバーのopenssl.cnf内の記述に書き換えられてしまうというオチ

という点でした。

結局、自己CA局で署名する場合は、CSRにSANは不要?、、、というよくわからない仕様。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です