2013-02-07 69 views
8

我想使用Python請求獲取公司內部網頁的內容(比如https://internal.com)。我可以在瀏覽器中看到此頁面,並且可以「查看證書」。如何找到SSL證書文件的路徑?

所以現在我想用請的網頁,所以我做的:

import requests 
requests.get('https://internal.com') 

但後來我得到一個SSLError:

SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

所以我想我需要指定一個證書文件:

requests.get('https://example.com', cert=('/path/server.crt', '/path/key')) 

但是,如何找到證書文件的路徑?在瀏覽網頁時,我可以從Chrome或IE獲取這些信息嗎?還是我錯過了更基本的東西?

+0

什麼是確切的錯誤? –

+0

@ brent5000:你是否嘗試僞造一個用戶代理? – Blender

+0

通過頭部僞裝用戶代理['User-Agent']返回相同的SSLError(剛添加到問題中)。 – brent5000

回答

8

cert參數用於客戶端身份驗證。如果你想證明你的身份到服務器。如果這是問題,您將在服務器上發生錯誤。

您需要的是服務器端身份驗證。服務器必須證明它是身份。 由於您正在連接到內部服務器,請求在其提供的捆綁包中沒有此服務器證書,因此無法確認服務器身份。 您必須使用內部CA軟件包提供請求。 要做到這一點,你必須先從瀏覽器中提取它。

從文檔:

You can also pass "verify" the path to a "CA_BUNDLE" file for private certs. 
You can also set the "REQUESTS_CA_BUNDLE" environment variable. 

鉻(短版):

  • 在URL欄chrome://settings/certificates
  • 選擇標籤 「權威」
  • 將這個尋找你的內部CA並點擊export
  • 最佳格式是「Base64編碼證書cha在」
  • 保存到一個位置,在那裏你會發現它再次
  • 現在你可以使用`request.GET中(URL,驗證=)

您還可以通過訪問該證書管理器:

  • 轉到設置
  • (處理鉻,非常相似於其他瀏覽器)
  • 點擊「顯示高級設置」底部
  • HTTPS/SSL - > 「管理證書」
  • 見上面
+0

謝謝,我能夠用這些說明導出證書。但是,當我將.cer傳遞給requests.get('https:// ...',verify ='/ path/to/.ces',我得到錯誤:[Errno 1] _ssl.c:504:錯誤:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:證書驗證失敗。看起來請求不喜歡我的具體證書,但你回答了我的問題,非常感謝。 – brent5000

+0

@ brent5000另一種方法是單擊url欄旁邊的ssl按鈕。 這讓我們看到當前網站的證書鏈。 然後在頂部導出證書,然後重試。 –

+0

如果此操作無法在Chrome瀏覽器中運行,會發生什麼情況?我試着做@ t-8ch建議使用firefox,我無法導出證書。 – gerl

相關問題