我的axis2+rampart 客户端与一些WS-Secured 服务器一起工作。服务器升级后它停止工作(JBoss 升级,WSDL 中的一些更改,但测试功能中没有)。服务器所有者声称他们的 WS-Security 配置没有更改,但现在我的客户报告:
org.apache.axis2.AxisFault: Must Understand check failed for header http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd : Security
早些时候,当“项目”的顺序axis2.xml
不好时,我得到了这个例外。我所要做的就是将这些项目组合起来。他们看起来像:
<parameter name="InflowSecurity">
<action>
<items>Signature Encrypt Timestamp</items>
...
现在这个问题又出现了。我看到答复中没有“时间戳”。我从项目中删除了它,但没有任何改变。
回复看起来像:
<soap:Envelope xmlns:soap="..."
xmlns:xenc="...">
<soap:Header>
<wsse:Security
xmlns:wsse="..."
soap:mustUnderstand="1">
<xenc:EncryptedKey xmlns:xenc="..."
Id="EncKeyId-B8B3555394366F3F0112919826983351032">
<xenc:EncryptionMethod Algorithm="..." />
<ds:KeyInfo xmlns:ds="...">
<wsse:SecurityTokenReference
xmlns:wsse="...">
<wsse:KeyIdentifier
...
</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>
...
</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#EncDataId-624" />
</xenc:ReferenceList>
</xenc:EncryptedKey>
<ds:Signature xmlns:ds="..."
Id="Signature-622">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="..." />
<ds:SignatureMethod Algorithm="..." />
<ds:Reference URI="#id-623">
<ds:Transforms>
<ds:Transform Algorithm="..." />
</ds:Transforms>
<ds:DigestMethod Algorithm="..." />
<ds:DigestValue>
...
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
...
</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-B8B3555394366F3F0112919826983181029">
<wsse:SecurityTokenReference
xmlns:wsse="..."
xmlns:wsu="..."
wsu:Id="STRId-B8B3555394366F3F0112919826983181030">
<wsse:KeyIdentifier
EncodingType="..."
ValueType="...">
...
</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soap:Header>
<soap:Body xmlns:ns1="..."
xmlns:wsu="..."
wsu:Id="id-623">
<xenc:EncryptedData xmlns:xenc="..."
Id="EncDataId-624" Type="...">
<xenc:EncryptionMethod Algorithm="..." />
<ds:KeyInfo xmlns:ds="...">
<wsse:SecurityTokenReference
xmlns:wsse="...">
<wsse:Reference
xmlns:wsse="..."
URI="#EncKeyId-B8B3555394366F3F0112919826983351032" />
</wsse:SecurityTokenReference>
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>
...
</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</soap:Body>
</soap:Envelope>
我的问题:
- 我怎么知道安全的哪一部分真的失败了?是错误的顺序、缺少某些元素、某些额外的元素还是类似的错误?
- 如果我只有签名和加密的回复,我怎么能猜出我应该将哪些项目添加到壁垒 InflowSecurity 配置中?有没有办法知道我应该使用什么顺序?