Zeep/requests - 使用自签名证书验证 SSL 连接

问题描述

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

这是我所做的:

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

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

2nd - 连接到 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 可以完成这项工作。 我想我回顾了堆栈关于这个主题的所有问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)