1
An error was discovered processing the <wsse:Security> header

顺便说一句,这是一个 WS-Security 问题...

我看不出我的 WS 端点有什么问题(除了它在 TIBCO BW 引擎中运行的事实!)。有人对这种错误有任何“先验”吗?我意识到 WS-Security 标头可能会在任何地方被破坏以获取此错误,但是对于某种常见错误,必须有 90% 的百分比。

这是受保护的 SOAP - 客户端是独立的 java (WSS4J 1.5.0),仅在此阶段执行签名。

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
            <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-20237898">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                    <ds:Reference URI="#id-18414151">
                        <ds:Transforms>
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                        <ds:DigestValue>DvjhvAtEVxwntL/RjMCNhId57cg=</ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>
YbOB3FRduCr5rutpIvch9sDZfZToy3pjm+Kyl/Oqz6cAPqMVKqvKBb4P7ebnzP/3SVjm+PfLqlE5
BGgcT3Vz93apyg+eY1rAIYUs7K1Zt9F5ejMmij6HQpQTGpyM9BUXJi1x5bt9GuMtD0SK939bIIE2
ZUyZ0jPJp/wUhMonskw=
</ds:SignatureValue>
                <ds:KeyInfo Id="KeyId-15734641">
                    <wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-3852606">
                        <ds:X509Data>
                            <ds:X509IssuerSerial>
                                <ds:X509IssuerName>CN=Mark Hesketh,OU=asdf,O=DVA,L=Canberra,ST=ACT,C=AU</ds:X509IssuerName>
                                <ds:X509SerialNumber>1231310305</ds:X509SerialNumber>
                            </ds:X509IssuerSerial>
                        </ds:X509Data>
                    </wsse:SecurityTokenReference>
                </ds:KeyInfo>
            </ds:Signature>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-18414151">
        <message xmlns="http://www.tibco.com/schemas/CertificateWork/Resources/Schema.xsd" text="Sample msg with SHA1 signature"/>
    </soapenv:Body>
</soapenv:Envelope>
4

2 回答 2

3

哇......如果你仍然有这个问题,你比我更有耐心......但以防万一,这是我的想法:

  • http://schemas.xmlsoap.org/specs/ws-security/ws-security.htm#ws-security__toc6201567 - 表明这是读取标签的问题。
  • 让我印象深刻的一件事是,我没有看到将签名与密钥信息联系起来的参考。当然,我会假设 KeyInfo 元素正在描述使用私钥生成 SignatureValue 的证书,但我没有看到告诉软件的 XML 片段。我认为包括 KeyInfo 是不够的,可能必须有一个链接。
  • 如果不是这样,我会仔细检查这个模式,也许是一个独立的模式验证源。标题级别的错误让我想到的是格式而不是内容。

这是我对这个的第一次猜测,这只是一个猜测,没有亲身体验你的系统并尝试了一堆不同的东西。如果这不起作用,这是我针对此类错误的一般逻辑链:

  1. 格式- 根据架构,XML 是否正确?
  2. 签名——签名需要三样东西:数据、密钥、一组生成它的算法。检查所有三个 - 数据是否正确,密钥是否正确,算法是否适合密钥以及如何处理消息?此外,您的图书馆是否正确引用并找到了关键和数据项?
  3. 信息的外部来源- 在这种情况下,您的密钥信息引用可能是从其他地方提取的证书 - 例如 LDAP 证书存储。那么..您的代码可以访问该外部源吗,是否可以从您运行代码的位置访问正在运行的数据源和网络?等等
  4. 如果 PKI——证书验证/信任——系统必须在幕后做什么才能信任签名者?OCSP 检查?在 LDAP 中查找?链接到受信任的根?等等。信任算法是否正常工作,是否具备所需的一切 - 即访问 OCSP 响应程序、正确配置的证书存储等。

我根据我对错误含义的猜测重新排列了这些步骤。这些错误不是那么直观——所以我经常经历所有这些步骤,以防我对错误的解释是错误的。此外,我可能会在以后防止出现问题......

于 2009-10-12T14:05:25.280 回答
0

检查标题中的SOAPAction。WSDL 中的值必须与调用中的值相同。错误的值可能会导致InvalidSecurity错误。

在Java中,您可以将消息作为文本获取

soapMessage.getSOAPPart().getEnvelope();

您可以在此处检查值和设置。

于 2021-10-22T13:37:15.360 回答