openssl -showcertsと-servernameは間違ったアンカー/ルートを提供しますか?

openssl -showcertsと-servernameは間違ったアンカー/ルートを提供しますか?

トピックに関する複数の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証明書ディレクトリにあるかどうかは別の問題です。更新できます。

関連情報