サーバーのSSL証明書から発行者またはサブジェクトハッシュを取得する

サーバーのSSL証明書から発行者またはサブジェクトハッシュを取得する

특정 서버에 대한 SSL 인증서의 주체 해시 발급자를 확인할 수 있는 방법이 있나요?

나는 curl특정 해시를 기반으로 또는 (또는 다른 배포 특정 위치)에서 wget일치하는 루트 인증서를 검색한다는 것을 알고 있습니다./var/lib/ca-certificates/openssl/etc/ssl/certs

私が尋ねる理由は、証明書が期限切れになることがあるため、新しい証明書をダウンロードするには、どの証明書ファイルが期限切れになったかを知る必要があるからです。しかし、strace更新する必要がある証明書を確認する方法(を使用する以外)を見つけることができないようです。

curlコマンド(またはget)を実行すると、straceどのルート証明書が開かれているかを確認できます。

$ strace -e trace=open /usr/bin/curl https://git.kernel.org
...
open("/var/lib/ca-certificates/openssl/4042bcee.0", O_RDONLY) = 7
...

ルート証明書に関する情報を取得できます。

$ readlink -f /var/lib/ca-certificates/openssl/4042bcee.0
/var/lib/ca-certificates/openssl/ISRG_Root_X1.pem

$ openssl x509 -noout -issuer -subject -hash -in /var/lib/ca-certificates/openssl/ISRG_Root_X1.pem
issuer= /C=US/O=Internet Security Research Group/CN=ISRG Root X1
subject= /C=US/O=Internet Security Research Group/CN=ISRG Root X1
4042bcee

サーバーの証明書が次のように提供されることを確認しました。「暗号化しよう」しかし、関連するルート証明書を見つけるのに役立つ情報が含まれていないようです。

curl -sv https://git.kernel.org 2>&1 > /dev/null  |sed -n '/SSL/,/SSL/p'
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=ams.source.kernel.org
*  start date: Jan 15 18:02:38 2023 GMT
*  expire date: Apr 15 18:02:37 2023 GMT
*  subjectAltName: host "git.kernel.org" matched cert's "git.kernel.org"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.

また、次のコマンドでトピックハッシュを確認しようとしましたが(私の環境はプロキシの後ろにあります)、私が見ているものと一致しません。

$ openssl s_client -proxy myproxy:myport -connect git.kernel.org:443 -servername git.kernel.org < /dev/null 2>/dev/null | openssl x509 -noout -issuer -subject -hash
issuer=C = US, O = Let's Encrypt, CN = R3
subject=CN = ams.source.kernel.org
1c27cb82

サーバー証明書のハッシュ(1c27cb82)私の証明書のハッシュ(4042bcee)。

では、探す必要があるルート証明書のハッシュをどのようにcurl知ることができますか?wgetコマンドラインを使用して同じことをどのように実行できますか?

ベストアンサー1

私は答えを見つけました。サイトの証明書のみを確認しましたが、証明書チェーン全体、最も重要なルートCA証明書は確認されませんでした。

この問題を解決するには、まずコマンド-showcertsのフラグを使用して証明openssl s_client書チェーン全体を表示する必要がありました。

次に、openssl提供されたすべての証明書を確認するためにループを実行します。 「-issuer_hash除外」-hash(「」の同義語)も確認しました-subject_hash

openssl s_client -showcerts -proxy myproxy:myport -connect git.kernel.org:443 -servername git.kernel.org < /dev/null 2>/dev/null | (while openssl x509 -noout -issuer -subject -subject_hash -issuer_hash 2>/dev/null; do true; done)
issuer=C = US, O = Let's Encrypt, CN = R3
subject=CN = ams.source.kernel.org
1c27cb82
8d33f237
issuer=C = US, O = Internet Security Research Group, CN = ISRG Root X1
subject=C = US, O = Let's Encrypt, CN = R3
8d33f237
4042bcee
issuer=O = Digital Signature Trust Co., CN = DST Root CA X3
subject=C = US, O = Internet Security Research Group, CN = ISRG Root X1
4042bcee
2e5ac55d

その後、予想されるハッシュ()を3番目の証明書のサブジェクトハッシュとして表示し、4042bceeチェーン内の2番目の証明書の発行者ハッシュを表示できます。

おすすめ記事