OpenSSL で証明書の順番を確認してみる
概要
TLS 証明書は大抵の場合で中間認証局によって発行されているので、 サーバに設定する証明書は証明書+中間証明書の組み合わせになっていると思うが、 くっつける順番がいつもわからなくなるので、正しく設定できているか不安になる。 そこで、確認する方法を調べてみた。
稼働しているWebサーバの場合
このブログの Web サーバ (blog.monophile.net) の証明書を確認する場合は↓のようにすれば良い。 (このブログは CloudFront+S3 で配信されていて、 さらに AWS CertificateManager を使っているので、証明書の確認をする必要はほぼない。)
$ openssl s_client -servername blog.monophile.net -host blog.monophile.net -port 443 -showcerts -verify 0 </dev/null \
|& openssl crl2pkcs7 -nocrl -certfile /dev/stdin \
|& openssl pkcs7 -print_certs -noout
|& cat -n
↑を行うと↓が出力される。 ※ 後の説明のために行番号も付与している。
1 subject=/CN=*.monophile.net
2 issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
3
4 subject=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
5 issuer=/C=US/O=Amazon/CN=Amazon Root CA 1
6
7 subject=/C=US/O=Amazon/CN=Amazon Root CA 1
8 issuer=/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
9
10 subject=/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
11 issuer=/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
12
1行目のsubjectを2行目のissuerが証明していて、 4行目のsubjectを5行目のissuerが証明していて、 7行目のsubjectを8行目のissuerが証明していて、 10行目のsubjectを11行目のissuerが証明していることがわかる。
Let’s Encrypt の場合
Let’s Encryptで取得した証明書の場合は fullchain.pem
を入力にすればよい。
$ openssl crl2pkcs7 -nocrl -certfile /etc/letsencrypt/live/example.net/fullchain.pem \
| openssl pkcs7 -print_certs -noout
subject=/CN=example.net
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
subject=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
issuer=/O=Digital Signature Trust Co./CN=DST Root CA X3