簡體   English   中英

Python:urllib3 無法識別系統 CA 證書

[英]Python: System CA certificates not recognized by urllib3

當我嘗試訪問任何 HTTP 網站時,即使是最受歡迎的網站之一,我也會收到來自 urllib3 模塊的 SSL 警告。

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> http.request("GET", "https://www.google.de")
/usr/lib/python2.7/site-packages/urllib3/connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)
<urllib3.response.HTTPResponse object at 0x7f5251466c90>
>>> 

有人可以幫我解決這個問題嗎?

不幸的是,我必須使用 API 顯然在后台使用 urllib3 來執行實際的 REST 調用。

所以我必須在不使用 urllib3 模塊的情況下修復它。 我已經使用包含 CA 證書的ssl.SSLContext.get_ca_certs()檢查了 ca 證書。 對 curl 或 openssl 執行相同操作,不會出現任何驗證警告。

提前致謝。

urllib3 文檔解釋了如何明確指定證書包。 初始化PoolManager()時,您只需傳遞證書的路徑:

import urllib3

http = urllib3.PoolManager(
    cert_reqs="CERT_REQUIRED",
    ca_certs="/path/to/your/certificate_bundle"
)
resp = http.request("GET", "https://example.com")

默認情況下,它使用 certifi 證書捆綁包,因此除非您使用自簽名證書或私有 CA,否則您甚至不必這樣做。 如果您在流行站點上看到此問題,則說明您的 CA 相關環境變量或您的證書包有問題,或者您遇到了錯誤。 升級到最新版本的 certifi 和 urllib3。 在最近的版本中,一些與 CA 相關的行為也發生了變化。

暫無
暫無

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

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