トピックに関する複数のSO投稿を読みましたが(例えばそして例えば)、openssl s_client -showcerts -servername
無効なアンカー/ルート証明書がダウンロードされましたが、私のWebブラウザに正しいアンカー/ルート証明書が表示されました。
# get the chain of certs
[root@server dir]# openssl s_client -connect www.google.com:443 -servername www.google.com -showcerts 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > chain.pem
[root@server dir]#
# save the chain's certs to files: cert.pem (client/leaf) cert1.pem cert2.pem
[root@server dir]# cat chain.pem | awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
[root@server dir]#
# verify fails
[root@server dir]# openssl verify -trusted cert2.pem -untrusted cert1.pem cert.pem
cert.pem: C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
error 2 at 2 depth lookup:unable to get issuer certificate
# verify succeeds
# openssl verify -trusted ANCHOR-FROM-BROWSER.PEM -untrusted cert1.pem cert.pem
cert.pem: OK
Firefoxでは、Googleのアンカー/ルートPEMに「AocvmM」が含まれていると正しく表示されますが、opensslはそれを見つけることができません(CentOS 7.4およびUbuntu 16.04.3 LTS、btwでも同じ動作)。
[root@server dir]# openssl s_client -connect www.google.com:443 -showcerts -servername www.google.com 2>&1 < /dev/null | grep AocvmM
[root@server dir]#
Q: -showcerts が表示されない理由正しいアンカー/ルート証明書?つまり、アンカー/ルートではない場合、-showcertsはどの証明書を表示しますか?
答え1
「バンドル」(証明書チェーンを含むファイル)に含まれる証明書のリストは、ページを提供するWebサーバー(おそらくApache)によって決まります。 opensslは、s_client(または通常はopenssl)が正確で完全なリストを受け取るかどうかを制御できません。
ルート証明書が必要ですこのウェブサイトで見つけることができます。
以下を含むテキストのコピー
-----BEGIN CERTIFICATE-----
~まで
-----END CERTIFICATE-----
名前付きの人へequifax.pem
その後、チェーン全体を確認します。
$ openssl verify -CAfile equifax.pem -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK
編集する
これは、Equifax証明書がデフォルトのローカルSSL証明書ストア(/ etc / ssl / certs /)にある場合にも機能します。
$ openssl verify -untrusted cert1.pem -untrusted cert2.pem cert.pem
cert.pem: OK
Equifax証明書がSSL証明書ディレクトリにあるかどうかは別の問題です。更新できます。