问题描述
我正在尝试使用 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 (将#修改为@)