[英]Python requests: Passing multiple client certificates to session.cert
我正在編寫一個 Flask 應用程序,該應用程序連接到使用 TLS v1.2 的外部 soap 服務。 我正在使用 Python 2.7 並請求版本 2.18.1 中的庫。
我已經聯系了服務器所有者,他告訴我我需要在 TLS 連接中包含多個客戶端證書。 這是我在單獨的.pem 文件中擁有的 3 個證書鏈。 (root + 中級 + 我的客戶證書)。 如果我只有最后一個,服務器不會讓我進去。
我已經用 SoapUI 和 Wireshark 對此進行了測試,這是真的。 只有當我提供 3 個證書的整個鏈時,我才會收到回復。 僅傳遞我的客戶端證書時,我從服務器收到錯誤消息。
從請求文檔中,您可以讀到作為客戶端證書,您可以使用以下方法僅通過一個證書:
session = requests.session()
session.cert = ('/path/client_cert.pem', '/path/private_key.pem')
response = session.post(SERVICE_URL, data=XML_CONTENT, headers=HEADERS)
即使我的“client_cert.pem”文件是 3 個證書的捆綁包,我也會收到錯誤消息(就像您在 session.verify 中使用 CA 證書執行此操作一樣)。 我可以在 Wireshark 上看到只有第一個用於 TLS 連接。
有沒有辦法在 Python 的請求庫中包含多個證書 TLS 連接?
也許我應該使用不同的庫或覆蓋其中的一些代碼?
我懂了!
我安裝了一些遺留庫版本。
似乎這個問題已在版本 1.23 中由請求庫開發人員修復。 我還必須更新 urllib3。
我目前的requirements.txt是:
requests==2.22.0
urllib3==1.25.2 # compatible with requests 2.22
對於遵循規范,一切正常。 我已經檢查了 Wireshark 上的 TLS 連接。 “client_cert.pem”鏈中的所有證書都已通過。
如果您將來遇到此類問題,請記住檢查您的請求和 urllib3 庫版本是否兼容。
感謝你們!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.