nginxのサーバー証明書と中間証明書の連結順序について(key values mismatchエラー)

先週、さくらのクラウドで原因不明のサーバーリソース減少を喰らい、本番サーバーをこっそり引っ越ししたんですが、その設定時に、nginx がこんなエラーを吐くのを見つけました。

2017/09/22 23:48:46 [emerg] 1#1: SSL_CTX_use_PrivateKey_file
("/etc/pki/private/XXXXXXXXX_private.pem") failed
 (SSL: error:0B080074:x509 certificate routines:
X509_check_private_key:key values mismatch)

エラー自体はプライベートキーに関するものなのですが、プライベートキーはパスフレーズ解除以外で編集する類のものではないので、これはサーバー証明書かな。と直感。

さっそく、次のコマンドでサーバー証明書(中間証明書を連結済み)の内容を確認してみたところ…

openssl x509 -text -noout -in XXX.XXX.XXX_server.crt

なんとCN(common name)の項目がまるごと表示されないではありませんか。

で、何がおかしいのか、相変わらず調べもせずに色々と試してみたところ、

  • nginx では、サーバー証明書 → 中間証明書 の順に証明書を連結する必要がある。

ということを知りました。

もっというと、証明書チェーンの下流から順に記述する必要があるようで、サーバー証明書→中間証明書→クロスルート証明書…という感じの連結になります。

なお、連結した証明書の間には改行文字が必要になるので注意。

Hatena Pocket Line

コメントを記入