首页 > 解决方案 > Zeep/requests - 使用自签名证书验证 SSL 连接

问题描述

我正在尝试使用 API 颁发者提供的证书验证我的请求,但根本没有成功。

这是我所做的:

第一步 - 使用 openssl 将 .pfx 文件转换为 .pem:

openssl pkcs12 -in my_cert.pfx -out my_cert.pem -nodes

第二 - 连接到 API(有效但抛出 InsecureRequestWarning)

from zeep import Client
from requests import Session
from zeep.transports import Transport

session = Session()   
session.verify = False
session.cert= ('my_cert.pem')
transport = Transport(session=session)
client = Client(
     wsdl = url,
     transport=Transport(session=session))
r = client.service.getSomeData()

第三 - 设置时session.verify = True我得到:

SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain

4th - 我将证书从 my_cert.pem 上传到以下给出的路径:

from certifi import where
where()

但现在我得到:

HTTPSConnectionPool(host='12.234.44.56', port=8443): Max retries exceeded with url: /API/services/SomeService (Caused by SSLError(SSLCertVerificationError("hostname '12.234.44.56' doesn't match 'SomeServiceAlias'")))

wsdlsoap:address 位置指向https://12.234.44.56:8443/API/services/SomeService/

5th - 我还尝试将服务器证书保存到单独的文件并将它们传递给 session.verify:

openssl s_client -showcerts -connect 12.234.44.56:8443
session.verify = 'path/to/servercerts.pem'

但它给了我与步骤号相同的错误。4

为什么呢?我在 SOAP UI 中测试了这个 wsdl,并将 .pfx 添加到 SSL 设置中的 KeyStore 就可以了。我想我回顾了堆栈关于这个主题的所有问题。

标签: pythonsslsoapzeep

解决方案


推荐阅读