Python 2.7.9現在對SSL證書驗證的要求更爲嚴格。真棒!Python Urllib2 SSL錯誤
我並不感到驚訝的是,之前工作的程序現在正在獲取CERTIFICATE_VERIFY_FAILED錯誤。但我似乎無法讓他們工作(不完全禁用證書驗證)。
一個程序使用urllib2通過https連接到Amazon S3。
我下載根CA證書到一個名爲「verisign.pem」文件,試試這個:
import urllib2, ssl
context = ssl.create_default_context()
context.load_verify_locations(cafile = "./verisign.pem")
print context.get_ca_certs()
urllib2.urlopen("https://bucket.s3.amazonaws.com/", context=context)
,我仍然得到CERTIFICATE_VERIFY_FAILED錯誤,即使根CA在4號線正確地打印出來。
openssl可以很好地連接到這臺服務器。事實上,這裏是我用來獲取CA證書的命令:
openssl s_client -showcerts -connect bucket.s3.amazonaws.com:443 < /dev/null
我把最後的證書鏈,並把它放在一個PEM文件,OpenSSL的讀取罰款。這是一個與Verisign證書:
Serial number: 35:97:31:87:f3:87:3a:07:32:7e:ce:58:0c:9b:7e:da
Subject key identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
SHA1 fingerprint: F4:A8:0A:0C:D1:E6:CF:19:0B:8C:BC:6F:BC:99:17:11:D4:82:C9:D0
任何想法如何讓這與啓用驗證工作?
哪個證書在verisign.pem中?確保它是一個帶有A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B的SHA1指紋的證書'(Class 3 Public Primary Certification Authority)而不是'4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44' :A5:E5'(VeriSign Class 3公共主要認證機構 - G5) –
我終於找到了一個,它的工作原理,謝謝! 你怎麼知道哪個根證書被使用?我正在使用openssl x509命令轉儲鏈中的每個證書。他們中的大多數人說他們簽了哪個證書,但是我沒有看到最後一個證書在哪裏說明簽名的是哪個根證書。 – abjennings