脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

openssl でサーバ証明書もろもろ

先日 GlobalSign で証明書を取得したところ、x509 と PKCS7 の両方の形式で証明書が送られてきて、 x509 の場合はさらに中間証明書をこのウェブページから探してねと書かれていて、 どれがどれやらよくわからず探すのが面倒だった。

openssl を使って、PKCS7 → x509 変換をすることができる。 変換した方が中間証明書を探す手間もかからないし、選択ミスも起こらない。

なお、 CertificateChainFile が無くなったのは Apache-2.4.8 からで、2.4.6 以下の場合は 2.2系と同じ設定方法になる。
2.4系からはx509に羅列だ、と思ってると CentOS-7.2 標準のApacheが 2.4.6 だったりしてハマる。

PKCS7 → x509 変換

Apache-2.4.8 以降は、CertificateChainFile ディレクティブがなくなったので、 CertificateFile に x509 形式で、サーバ証明書→中間証明書(→ルート証明書) の順で記述した証明書を指定するようになった。
ルート証明はなくていいけど。

手で書いていってもいいのだけど、opensslを使って PKCS7 → x509 変換もできる。
BEGIN ~ END の間にゴミが入るのでそれは手動で消す必要があることに注意。

openssl pkcs7 -outform pem \
  -in www.example.com.pkcs7 \
  -out www.example.com.pem -print_certs

内容確認系

x509

openssl x509 -in www.example.com.pem  -text | less

PKCS7

openssl pkcs7 -in www.example.com.pkcs7 -print_certs -text | less

web経由で証明書確認

openssl s_client -connect www.example.com:443 -showcerts