2017-08-03 275 views
3

我試圖訪問已過期/無效證書的網頁。當我從瀏覽器訪問URL時,我收到安全警告Your connection is not private。但是當我使用python訪問相同的頁面時,我沒有收到任何錯誤。我使用的代碼如下,SSL證書驗證Urllib2

import urllib2 
url = 'https://expired.badssl.com/' 
request = urllib2.Request(url) 
result = urllib2.urlopen(request)  
print (result.read()) 

爲什麼我在urllib2中沒有收到SSL證書錯誤?

UPDATE

我確定了被下載的頁面是我的網絡認證頁面。

但是,當我使用requests我得到SSL異常。爲什麼urllib2的行爲與請求行爲有所不同?

回答

0

Python之前2.7.9還沒有驗證證書。

Python 2.7.9包含許多網絡安全增強功能,已被批准包含在Python 2.7維護版本中。 PEP 476將幾個標準庫模塊(如httplib,urllib2和xmlrpclib)更改爲默認驗證服務器通過安全(TLS)連接提供的證書。

來自2.7.14安裝說明。

另見

+0

它這是真的,該文件指出Python 2.7.9+中的urllib2默認驗證證書。然而,在Python 2.7.13中,我執行了'urllib2.urlopen(urllib2.Request(「https:// [編輯] /」))''和'requests.get(「https:// [編輯] /」)' ,似乎請求給出了一個SSL異常,而urllib2沒有!看來文檔是錯誤的! – cowlinator