2017-10-09 161 views
0

我試圖使用Python請求發送HTTP GET請求到需要客戶端證書的API。我傳遞一個PEM和密鑰文件導入使用Python請求獲取客戶端證書失敗

session = requests.Session() 
session.get('https://localhost/rest/containers/7uyeogzKQayw4mmQmcJb2Q/listeners', cert=('development.pem', 'development.key')) 

在進行此調用當GET請求,我使用NGINX爲終點,我越來越:

2017-10-07 21:18:16,874 - containerLogger - DEBUG - code:400 text: 
<html> 
<head><title>400 No required SSL certificate was sent</title></head> 
<body bgcolor="white"> 
<center><h1>400 Bad Request</h1></center> 
<center>No required SSL certificate was sent</center> 
<hr><center>nginx/1.12.1</center> 
</body> 
</html> 

我我們使用相同的證書針對相同的端點使用POST請求測試了相同的API,並且它是成功的。我使用瀏覽器(Firefox)成功驗證了相同的GET。

我目前正試圖弄清爲什麼POST成功,但GET失敗。我沒有找到答案的運氣。

不知道這是否是由於請求或urllib3。

版本:

  • 的Java 1.8
  • Jython的2.7.1
  • 的Python 2.7.10
  • 要求2.18.1
  • urllib3
  • CERTIFI 2017年4月17日

任何幫助非常感謝。

乾杯 - 埃裏克

回答

0

當你創建你有session.cert = '/path/to/client-cert.crt'

更簡單的方法就是把它作爲一個元組session = requests.Session()文檔的請求。

requests.get('https://localhost/rest/containers/7uyeogzKQayw4mmQmcJb2Q/listeners', cert=('/path/client.cert', '/path/client.key')) 

文檔鏈接

+0

我不知道你想要說什麼。我已經將該證書添加爲get的調用中的元組。我試圖甚至改變使用請求的會話,但它仍然失敗。使用session.cert只是根據文檔設置證書的一種持久方式。 – Erik

相關問題