1 回答
TA贡献1804条经验 获得超8个赞
经过几天的努力,我终于找到了问题所在。
为了对正文进行签名,我必须为标签分配一个 ID,以及在 tar 下对此 ID 的引用。
所以我的 XML 看起来像这样:
...
之后,我用我的私钥签署了传出消息。
这是我将 Id 属性添加到 Body 标记的函数:
/**
* Asigna un identificador único al nodo Body del mensaje.
*
* @param soapMessage Mensaje SOAP
*
* @throws SOAPException
*/
private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {
String idBody = "Body-123456";
SOAPBody soapBody = soapMessage.getSOAPBody();
soapBody.setAttributeNS(NAMESPACE_WSU, "wsu:Id", id_body);
}
由于某种我不明白的奇怪原因,上面的代码导致添加的数字签名没有通过验证。
我用这个函数替换了上面的函数:
/**
* Asigna un identificador único al nodo Body del mensaje.
*
* @param soapMessage Mensaje SOAP
*
* @throws SOAPException
*/
private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {
String idBody = "Body-123456";
SOAPBody soapBody = soapMessage.getSOAPBody();
SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
Name name = soapEnvelope.createName("Id", "wsu", NAMESPACE_WSU);
soapBody.addAttribute(name, id_body);
}
瞧!我之后添加了数字签名,现在它通过了验证。
Referencia [0]
URI: #Body-123456
Validacion OK: true
Digest: JMdmg+d/yJJA1wg7yzDctIBE9z4=
Expected digest: JMdmg+d/yJJA1wg7yzDctIBE9z4=
Referencia [1]
URI: #TS-1000
Validacion OK: true
Digest: sEY89etI7c+uGrFPh7W59nu/4ac=
Expected digest: sEY89etI7c+uGrFPh7W59nu/4ac=
添加回答
举报