簡體   English   中英

Python 請求:將多個客戶端證書傳遞給 session.cert

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

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