尝试访问资源自定义证书和请求时SSLError("坏握手")

lop*_*pow 6 python pfx zeep

我想编写webservices来使用Zeep在Python中交换数据.我只能使用我的证书访问服务.我有PFX证书,但我将其转换为两个.pem文件.

我的代码:

from zeep import Client
from zeep.wsse.signature import Signature 
import requests
from requests import Session
key_filename ='/.files/cert.key.pem'
cert_filename = './files/cert.crt.pem'
session = Session()  
r = requests.get('https:...../PingWs?wsdl',
             cert=(cert_filename, key_filename)) 
print (r)
Run Code Online (Sandbox Code Playgroud)

但我明白了

引发SSLError(e,request = request)requests.exceptions.SSLError:HTTPSConnectionPool(host ='evidim-test.gov.si',port = 443):使用url超出最大重试次数:/ ws/test/PingWs?wsdl(引起通过SSLError(SSLError("坏握手:错误([('SSL例程','tls_process_server_certificate','证书验证失败')],)",),))

ssh*_*270 17

您必须通过将用于签署您尝试从系统设置连接的远程服务器证书的CA证书列入白名单来解决此问题.但仅出于测试目的,您可以使用以下命令关闭验证:

r = requests.get('https:...../PingWs?wsdl',verify=False)
Run Code Online (Sandbox Code Playgroud)

不要在生产中使用它.

希望能帮助到你!


Sam*_*man 5

此错误几乎肯定意味着远程端点未使用本地证书颁发机构存储中的证书进行签名。您有两个选择:

  • 在请求使用的 CA 存储中安装证书。默认情况下,这是您的本地系统 CA 存储,至少可以由请求确定。

  • 配置一组不同的证书以用于请求会话对象。

举个例子:

import requests.sessions

photon_requests_session = requests.sessions.Session()
photon_requests_session.verify = "/etc/photon/cacerts.pem"
Run Code Online (Sandbox Code Playgroud)

然后我需要确保服务器 CA 证书在 /etc/photon/cacerts.pem 中。我这样使用:

r = photon_requests_session.get(url)
Run Code Online (Sandbox Code Playgroud)