我想编写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)
但是我得到了
提出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','证书验证失败')],)“,),))
答案 0 :(得分:13)
您必须通过将用于签署您尝试从系统设置连接的远程服务器证书的CA证书列入白名单来解决此问题。但仅出于测试目的,您可以使用以下命令关闭验证:
r = requests.get('https:...../PingWs?wsdl',verify=False)
不要在生产中使用它。
希望它有所帮助!
答案 1 :(得分:3)
此错误几乎肯定意味着远程端点未使用本地证书颁发机构存储中的证书进行签名。 您有两种选择:
在请求使用的CA商店中安装证书。默认情况下,这是您的本地系统CA存储,至少可以通过请求确定。
配置要在请求会话对象上使用的另一组证书。
举个例子:
import requests.sessions
photon_requests_session = requests.sessions.Session()
photon_requests_session.verify = "/etc/photon/cacerts.pem"
然后我需要确保服务器CA证书位于/etc/photon/cacerts.pem中。 我喜欢这样:
r = photon_requests_session.get(url)
答案 2 :(得分:0)
检查您的时间和日期是否正确。 SSL可能会带来问题