특정 서버에 대한 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番目の証明書の発行者ハッシュを表示できます。