无法在python的请求中使用客户端证书进行身份验证

时间:2018-04-18 09:46:55

标签: python python-requests

我使用以下代码行来请求HTTPS网址。

r = requests.get(
 'https://xxxx.xxx.xxx',
    cert='/Users/xxxx/Documents/xxxx.pem')

但是它给我发了这个错误:

SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

我可以通过命令加载证书:

openssl x509 -in xxxx.pem -text -noout

并检查证书中的私钥:

openssl rsa -in xxxx.pem -check

我不知道这里缺少什么让这个电话工作。 chrome中的相同请求工作正常。

谢谢! 昆

1 个答案:

答案 0 :(得分:0)

如果'/Users/xxxx/Documents/xxxx.pem'是检查'https://xxxx.xxx.xxx'证书所必需的CA cert,则需要将其传递给参数requests中的verify

r = requests.get(
   'https://xxxx.xxx.xxx',
   verify='/Users/xxxx/Documents/xxxx.pem',
)

如果它是client verification的证书,则不仅需要传递证书的路径,还需要传递私钥的路径:

r = requests.get(
   'https://xxxx.xxx.xxx',
   cert=('/Users/xxxx/Documents/cert.pem', '/Users/xxxx/Documents/privkey.pem'),
)