Python请求-客户端证书的SSL错误

Python请求-客户端证书的SSL错误,python,certificate,python-requests,Python,Certificate,Python Requests,我正在用python调用带有请求的REST API,到目前为止,当我设置verify=False时,它已经成功了 现在,我必须使用需要导入用于身份验证的客户端证书,每次使用证书(.pfx)时都会出现此错误。cert.pfx受密码保护 r = requests.post(url, params=payload, headers=headers, data=payload, verify='cert.pfx') 这就是我得到的错误: Traceback (mo

我正在用python调用带有请求的REST API,到目前为止,当我设置
verify=False
时,它已经成功了

现在,我必须使用需要导入用于身份验证的客户端证书,每次使用
证书(.pfx)时都会出现此错误。cert.pfx
受密码保护

r = requests.post(url, params=payload, headers=headers, 
                  data=payload, verify='cert.pfx')
这就是我得到的错误:

Traceback (most recent call last):
File "C:\Users\me\Desktop\test.py", line 65, in <module>
r = requests.post(url, params=payload, headers=headers, data=payload, verify=cafile)
File "C:\Python33\lib\site-packages\requests\api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "C:\Python33\lib\site-packages\requests\api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python33\lib\site-packages\requests\sessions.py", line 346, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python33\lib\site-packages\requests\sessions.py", line 449, in send
r = adapter.send(request, **kwargs)
File "C:\Python33\lib\site-packages\requests\adapters.py", line 322, in send
raise SSLError(e)
requests.exceptions.SSLError: unknown error (_ssl.c:2158)
回溯(最近一次呼叫最后一次):
文件“C:\Users\me\Desktop\test.py”,第65行,在
r=requests.post(url,params=payload,headers=headers,data=payload,verify=cafile)
文件“C:\Python33\lib\site packages\requests\api.py”,第88行,在post中
返回请求('post',url,data=data,**kwargs)
文件“C:\Python33\lib\site packages\requests\api.py”,第44行,在请求中
return session.request(method=method,url=url,**kwargs)
文件“C:\Python33\lib\site packages\requests\sessions.py”,第346行,在请求中
resp=自我发送(准备,**发送)
文件“C:\Python33\lib\site packages\requests\sessions.py”,第449行,在send中
r=适配器.send(请求,**kwargs)
文件“C:\Python33\lib\site packages\requests\adapters.py”,第322行,在send中
升起SSLError(e)
requests.exceptions.SSLError:未知错误(_ssl.c:2158)
我还尝试使用openssl获取
.pem
和密钥,但使用
.pem
获取
SSL:CERTIFICATE\u VERIFY\u失败


有人能告诉我如何导入证书以及在哪里放置证书吗?我尝试过搜索,但仍然面临同样的问题。

我也遇到同样的问题。
verify
参数引用服务器的证书。您希望
cert
参数指定您的客户端证书

import requests
cert_file_path = "cert.pem"
key_file_path = "key.pem"

url = "https://example.com/resource"
params = {"param_1": "value_1", "param_2": "value_2"}
cert = (cert_file_path, key_file_path)
r = requests.get(url, params=params, cert=cert)

我遇到了同样的问题,为了解决这个问题,我知道我们必须发送RootCA以及证书及其密钥,如下所示

response = requests.post(url, data=your_data, cert=('path_client_certificate_file', 'path_certificate_key_file'), verify='path_rootCA')

非常感谢你。抱歉,之前没有回复,但这似乎解决了问题!感谢您的回答。您是如何从.pfx中提取证书和密钥的?在大多数情况下,您不应该设置
verify=False
,因为这会禁用服务器证书的验证,从而使整个连接不安全,容易受到中间人攻击。如果您使用由知名CA颁发的证书连接到服务器,则根本不要指定
verify
。如果您使用私人/自定义CA颁发的证书连接到服务器,则应将该CA证书的路径作为
verify
参数的值传递(如果服务器的证书是自签名的,则将服务器的证书视为与CA证书相同)。@ierdna.pfx是.p12的同义词,即PKCS#12格式,使用OpenSSL转换为PEM包含在