有没有办法检查某些服务器的 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
然后我可以看到预期的哈希值 ( 4042bcee
) 作为第三个证书的主题哈希值,以及链中第二个证书的颁发者哈希值。