簡體   English   中英

如何找到自簽名證書

[英]how to find self signed certificate

我對網站證書驗證感到困惑。 請在下面查看詳細信息:

使用python urllib2連接到網站(www.bitstamp.net)的方式為:

urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)>

curl給出了類似的錯誤:

$ curl https://www.bitstamp.net
curl: (60) SSL certificate problem: self signed certificate in certificate chain

但是,openssl顯示每個已驗證的證書(假設“ 1”表示已驗證):

$ openssl s_client -showcerts -connect www.bitstamp.net:443
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = Hosted by Incapsula Inc, OU = PositiveSSL Multi-Domain, CN = incapsula.com
verify return:1

這里發生了什么? 是否有curl聲稱的“自簽名證書”? 如果是這樣,哪一個?

此行為有幾個症狀。 讓我們從第一個問題開始。

鏈中的自簽名證書錯誤:這是正確的,也是有效的情況。 因為每個根證書頒發機構都是自簽名的。 在您的情況下,AddTrust是自簽名的。 這可能表明curl / libssl或其他客戶端無法識別證書頒發機構。 如您所說,openssl s_client已驗證證書。 在許多Linux發行版中,它位於/ etc / ssl / certs下。 您的可能有所不同,或者您可能需要更新它們。 您還應該定義這些CA在庫中的位置(即使在libssl-SSL_CTX_load_verify_locations中)

基於SNI的問題表明目標服務器正在同一主機/ ip上服務於多個基於TLS / SSL的站點。 如果沒有明確的SNI規范,服務器將無法響應任何一個(我不確定選擇算法,可能是隨機的也可能是第一個)。

由於這些原因,這兩種情況對我來說都是有效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM