如何解决在 SOAP 响应中禁用签名验证 (Zeep Python)
我正在用 Python 创建一个代码来使用带有 WSS(数字签名)的 SOAP 服务。 数字签名配置只对请求是必要的,服务器回答一个 SOAP 而没有 WSS。 这是实现的代码:
from requests import Session
from zeep import Client
from zeep import xsd
from zeep.transports import Transport
from zeep.wsse.signature import Signature
from lxml import etree
import xmlsec
wsdl = 'FIle.wsdl'
key = 'PruebasPython\test1key.pem'
cert = 'PruebasPython\test1cer.pem'
signature = Signature('PruebasPython\cer_key.pem','PruebasPython\cer_cert.pem',None)
session = Session()
session.cert = (cert,key)
session.verify = 'PruebasPython\Root CA.cer'
transport = Transport(session=session)
client = Client(wsdl,wsse=signature,transport=transport)
print(client.service._binding_options["address"])
client.service._binding_options["address"] = 'https://datapower.com:8724/customopp'
print('Nuevo Endpoint')
print(client.service._binding_options["address"])
response = client.service.customOpp(requestHeader = requestHeaderType(esbHeaderRq),customOppRq= customOppRqType(customrqType('CC','123456789')),)
print('RESPONSE')
if response:
print("SUCCESS")
else:
print('ERROR')
在服务器的日志中,我看到Request到达正确(有数字签名)并且流程正确,当服务器响应并且SOAP响应到达客户端时,生成以下错误:
Traceback (most recent call last): File "PruebasPython\Test.py",line 55,in <module> response = client.service.customOpp(requestHeader = requestHeaderType(esbHeaderRq),'123456789')))
File "AppData\Local\Programs\Python\python39\lib\site-packages\zeep\proxy.py",line 46,in __call__ return self._proxy._binding.send(
File "AppData\Local\Programs\Python\python39\lib\site-packages\zeep\wsdl\bindings\soap.py",line 135,in send return self.process_reply(client,operation_obj,response)
File "AppData\Local\Programs\Python\python39\lib\site-packages\zeep\wsdl\bindings\soap.py",line 219,in process_reply client.wsse.verify(doc)
File "AppData\Local\Programs\Python\python39\lib\site-packages\zeep\wsse\signature.py",line 73,in verify _verify_envelope_with_key(envelope,key)
File "AppData\Local\Programs\Python\python39\lib\site-packages\zeep\wsse\signature.py",line 313,in _verify_envelope_with_key signature = security.find(QName(ns.DS,"Signature")) AttributeError: 'nonetype' object has no attribute 'find'
我不知道为什么会产生错误,我知道代码正在等待带有签名的 SOAP 响应,但是流程和实现的代码不需要这样做,因为我在禁用回答,或者您能否澄清这一点。
我澄清您进行了相同的 SSL 和 SOAPUI 签名配置,并且服务正常工作,我收到了答案并且它是有效的。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。