我需要从 HTTPS 网站https://api.paczkomaty.pl下载 PEM 格式的 SSL 证书。所以我使用 OpenSSL 来做到这一点:
openssl s_client -connect api.paczkomaty.pl:443 > myfile
openssl x509 -in myfile -text
结果如下:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
0d:5a:87:30:7e:43:96:05:5e:20:f3:2f:14:a4:d9:47
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = GeoTrust Inc., CN = RapidSSL SHA256 CA
Validity
Not Before: Mar 11 00:00:00 2017 GMT
Not After : Apr 10 23:59:59 2018 GMT
Subject: CN = *.grupainteger.pl
(...)
但是,当我通过浏览器(Chrome 或 Firefox)访问该网站并检查其证书时,它会显示一个不同的证书;其序列号不同,有效期为 2018 年 1 月 1 日至 2018 年 1 月 9 日。
为什么 OpenSSL 获取不同的证书?
s_client
默认情况下不发送 SNI(服务器名称指示)数据,但浏览器会发送。服务器可能会根据该 SNI 的内容选择使用不同的证书进行响应 - 或者如果没有 SNI,那么它将提供默认证书。尝试添加-servername api.paczkomaty.pl
到您的s_client
命令行同一物理服务器上的多个 SSL/TLS 站点,使用 TLS SNI(服务器名称指示)。如果客户端不提供 SNI 信息(
s_client
除非被告知,否则 OpenSSL 不会提供),则会使用一些后备默认站点证书。-servername
像这样将选项添加到您的openssl s_client
命令中: