如果你知道你正在試圖獲得該網站是一個「好人」,你可以嘗試創建你的「開門紅」是這樣的:
import httplib2
if __name__ == "__main__":
h = httplib2.Http(".cache", disable_ssl_certificate_validation=True)
resp, content = h.request("https://site/whose/certificate/is/bad/", "GET")
(最有趣的部分是disable_ssl_certificate_validation=True
)
從文檔: http://bitworking.org/projects/httplib2/doc/html/libhttplib2.html#httplib2.Http
編輯01:
由於您的問題實際上是爲什麼會發生這種情況,因此您可以檢查this或this。
編輯02:
怎麼看這個答案已經被越來越多的人比我預料的訪問,我想解釋一下當禁用證書驗證可能是有用的。
首先,介紹一下這些證書的工作原理。上面提供的鏈接中有相當多的信息,但無論如何,這裏都是這樣。
SSL證書需要由衆所周知的(至少,您的瀏覽器已知)Certificate Authority驗證。你通常從這些機構之一買下整個證書(Symantec,GoDaddy ...)
從廣義上說,這個想法是:這些證書頒發機構(CA)給你說也包含CA信息在它的證書。你的瀏覽器有一個知名CA的列表,所以當你的瀏覽器收到一個證書時,它會做類似這樣的事情:「HmmmMMMmmm .... [瀏覽器在這裏製作一個爽朗的臉]...我收到證書,並說它已經過賽門鐵克的驗證,我知道那個「賽門鐵克」的人嗎? [瀏覽器然後進入知名CA的列表並檢查賽門鐵克]哦,是啊!我確定。證書是好的!
您可以看到自己的信息,如果你在瀏覽器中點擊小鎖由URL:
然而,也有你只是想測試的HTTPS案件,您可以使用一對command line工具創建自己的證書頒發機構,並使用該「自定義」CA來簽署剛剛生成的「自定義」證書,對吧?在這種情況下,您的瀏覽器(順便提一句,在問題中是httplib2.Http
)不會在可信CA列表中包含您的「自定義」CA,因此它會說該證書是無效的。這些信息仍然會被加密,但是瀏覽器告訴你的是,它並不完全相信那是加密到你認爲正在發生的地方。
例如,假設您創建了一套自定義鍵和CA和所有的曼波巨無霸以下this tutorial爲您localhost
FQDN和您的CA證書文件位於當前目錄中。您可以很好地使用您的自定義證書和其他內容在https://localhost:4443
上運行服務器。現在,您的CA證書文件位於當前目錄中的文件./ca.crt
(與Python腳本將要運行的目錄相同)中。你可以這樣使用:
h = httplib2.Http(ca_certs='./ca.crt')
response, body = h.request('https://localhost:4443')
print(response)
print(body)
...你不會看到警告了。爲什麼?因爲你告訴去尋找CA的證書./ca.crt
)
然而,由於鉻(舉一個瀏覽器)不知道該CA的證書,它會認爲它無效:
此外,證書過期。您有機會在一家使用SSL加密的內部網站的公司工作。它可以運行一年,然後你的瀏覽器開始抱怨。你去找負責安全的人,並詢問「喲!我在這裏得到這個警告!發生了什麼事?」答案很可能是「哦,男孩!!我忘了更新證書!沒關係,從現在開始接受它,直到我修好。」(真實的故事,雖然我收到的答案中有swearwords :-D)
我敢肯定的SSL證書驗證失敗**: - d ** – BorrajaX