Openssl

OpenSSL 獲取的 SSL 證書與通過瀏覽器獲取的證書不同

  • February 5, 2018

我需要從 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 獲取不同的證書?

為什麼 OpenSSL 獲取不同的證書?

s_client預設情況下不發送 SNI(伺服器名稱指示)數據,但瀏覽器會發送。伺服器可能會根據該 SNI 的內容選擇使用不同的證書進行響應 - 或者如果沒有 SNI 存在,那麼它將提供預設證書。嘗試添加-servername api.paczkomaty.pl到您的s_client命令行

同一物理伺服器上的多個 SSL/TLS 站點,使用 TLS SNI(伺服器名稱指示)。如果客戶端不提供 SNI 資訊(s_client除非被告知,否則 OpenSSL 不會提供),則會使用一些備份預設站點證書。

-servername像這樣將選項添加到您的openssl s_client命令中:

openssl s_client -servername api.paczkomaty.pl -connect api.paczkomaty.pl:443 > myfile

引用自:https://unix.stackexchange.com/questions/421969