[英]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.