openssl verify
証明書の署名、有効期間、CA制約、CAのKey Usageなどを検証する。 -purpose を指定すると、対象証明書の Key Usage や Extended Key Usage が用途に合っているかも確認できる。
失効 は自動では確認されない。CRLを使う場合は -CRLfile と -crl_check などを明示的に指定する。
openssl verify \ -CAfile 信頼するCA証明書 \ -untrusted 中間CA証明書 \ 検証する証明書証明書ファイル名を指定した後ろに書いた値は、オプションではなく別の証明書ファイルとして解釈される。オプションは対象証明書より前に指定する。
証明書チェーンの検証
Section titled “証明書チェーンの検証”openssl verify \ -CAfile root.crt \ -untrusted intermediate.crt \ server.crt役割:
root.crt 信頼する起点intermediate.crt チェーン構築に使う中間証明書server.crt 検証対象期待する結果:
server.crt: OK
DNS名の検証
Section titled “DNS名の検証”openssl verify \ -CAfile root.crt \ -untrusted intermediate.crt \ -purpose sslserver \ -verify_hostname www.example.com \ server.crtOpenSSLは SAN のDNS名、またはSubjectのCommon Nameと照合する。現代のTLSサーバー証明書では、接続に使用するDNS名をSANへ含める。
IPアドレスの検証
Section titled “IPアドレスの検証”openssl verify \ -CAfile root.crt \ -untrusted intermediate.crt \ -purpose sslserver \ -verify_ip 192.168.1.1 \ server.crt証明書のSANに IP:192.168.1.1 が含まれているか確認する。
よく使うオプション
Section titled “よく使うオプション”-CAfile
Section titled “-CAfile”信頼するCA証明書をまとめたファイルを指定する。
-CAfile root.crtここへ指定した証明書は Trust Anchor として扱われる。通常は自己署名の Root CA証明書 を指定する。
複数のCA証明書を含める場合は、 PEM形式 の証明書を連結したファイルを指定できる。
-untrusted
Section titled “-untrusted”証明書チェーンの構築に使用する Intermediate CA証明書 を指定する。
-untrusted intermediate.crt名前のとおり、このファイルに含まれる証明書自体を信頼するわけではない。信頼済みRoot CAまでチェーンをつなぐための候補として使用する。
-purpose
Section titled “-purpose”対象証明書の用途を指定し、Key UsageやExtended Key Usageが用途に合っているか検証する。
-purpose sslserverTLSサーバー証明書では sslserver、TLSクライアント証明書では sslclient を使用する。指定しなければ、 openssl verify 単体では特定用途に対する対象証明書の拡張検査を行わない。
-verify_hostname
Section titled “-verify_hostname”証明書が指定したDNS名に対して有効か検証する。
-verify_hostname www.example.comOpenSSLはSANのDNS名、またはSubjectのCommon Nameと照合する。現在のTLSサーバー証明書では、接続先名をSANへ指定する。
-verify_ip
Section titled “-verify_ip”証明書が指定したIPアドレスに対して有効か検証する。
-verify_ip 192.168.1.1IPアドレスはSANの IP として登録されている必要がある。 DNS へIPアドレスを記述したものとは一致しない。
-show_chain
Section titled “-show_chain”検証に成功した場合、構築された証明書チェーンを表示する。
-show_chain-untrusted から使用された証明書には untrusted と表示されるが、これは検証失敗を意味しない。
-check_ss_sig
Section titled “-check_ss_sig”証明書チェーンの末尾にある自己署名証明書についても、自己署名を検証する。
-check_ss_sigRoot CA証明書自身の署名まで確認する場合に使用する。通常のチェーン検証では、Trust Anchorの自己署名は既定では検証されない。
自己署名の検証に成功しても、そのRoot CAが自動的に信頼されるわけではない。信頼するかどうかはTrust Storeの設定によって決まる。
失敗時の見方
Section titled “失敗時の見方”例:
error 20 at 0 depth lookup: unable to get local issuer certificatedepth は問題が見つかった位置を示す。
| depth | 対象 |
|---|---|
0 |
検証対象のサーバー証明書 |
1 |
その発行元のIntermediate CA証明書 |
2 |
さらに上位のCA証明書 |
よくある原因:
- Intermediate CA証明書を
-untrustedへ指定していない - 誤ったRoot CA証明書を
-CAfileへ指定している - 証明書の有効期限が切れている
- CA証明書に
CA:TRUEやkeyCertSignがない - SANと検証するDNS名・IPアドレスが一致しない
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-verify 証明書チェーンの検証、信頼する証明書と中間証明書の指定。
-
openssl-verification-options ホスト名、IPアドレス、用途、有効期間などの検証オプション。