python - 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 就可以了。我想我回顾了堆栈关于这个主题的所有问题。
解决方案
推荐阅读
- reactjs - 使用由 forwardRef 包裹的通用道具导出组件
- git - `git checkout`失败后如何恢复`git lfs post-checkout`挂钩
- java - 如何重构依赖注入的静态函数?
- python - 通过多线程/多处理卡住的杀死方法
- python - from dream.simulation.Queue import Queue No module named 'CoreObject'
- symfony - 无法在命令类中获得服务。Symfony 3.4
- java - 未找到依赖项 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.3'
- javascript - Express Validator 中的可选对象字段但强制对象字段
- biztalk - 为什么双向发送端口不处理响应?
- android - Ionic 更改本机剪贴板复制/粘贴选择窗口布局