我需要从 HTTPS 网站下载 PEM 格式的 SSL 证书,https://api.paczkomaty.pl。所以我使用 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)访问该网站并检查其证书时,它显示了不同的证书;其序列号不同,有效期为15/1/2018至1/9/2018。
为什么 OpenSSL 获取不同的证书?
答案1
为什么 OpenSSL 获取不同的证书?
s_client
默认情况下不发送 SNI(服务器名称指示)数据,但浏览器会发送。服务器可以根据该 SNI 的内容选择使用不同的证书进行响应,或者如果不存在 SNI,则它将提供默认证书。尝试添加-servername api.paczkomaty.pl
到您的s_client
命令行
答案2
同一物理服务器上的多个 SSL/TLS 站点,使用 TLS SNI(服务器名称指示)。如果客户端不提供 SNI 信息(OpenSSLs_client
不会提供,除非被告知),则会使用一些后备默认站点证书。
将选项添加-servername
到您的openssl s_client
命令中,如下所示:
openssl s_client -servername api.paczkomaty.pl -connect api.paczkomaty.pl:443 > myfile