升级java后,XMLSignature值会发生变化

时间:2015-11-17 16:01:51

标签: java xml-signature

我们在Websphere Message Broker v.7(在Java 6上运行)中有一个消息流,它使用带有证书和私钥的给定密钥库来签署XML消息。

但是,在迁移到IIB v.9(在Java 7上运行)之后,它开始为同一XML消息创建不同的结果。唯一的区别是签名值字段。

结果,接收方说消息是以错误的方式签名的。

为什么会这样? 密钥库在两种环境中都是相同的。

以下是执行签名的代码片段:

    XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance();
    SignedInfo signedInfo = createSignedInfo(sigFactory, timestamp, timestampId, body, getBodyId(body));
    .........

    XMLSignature sig = sigFactory.newXMLSignature(signedInfo, keyInfo);
    DOMSignContext sigContext = new DOMSignContext(privateKey, security);
    .........

    sig.sign(sigContext);

我们尝试在两种环境中比较java.security,但似乎是相同的。

我们使用RSA-SHA1:

 private SignedInfo createSignedInfo(XMLSignatureFactory sigFactory, Element timestamp, String timesetampId, Element body, String bodyId) throws Exception {
    ExcC14NParameterSpec spec = new ExcC14NParameterSpec(Arrays.asList(SOAP_SCHEMA.getPrefix()));
    CanonicalizationMethod canonicalizationMethod = sigFactory.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE, spec);
    List<Reference> references = createSignatureReferences(sigFactory, timestamp, timesetampId, body, bodyId);
    return sigFactory.newSignedInfo(canonicalizationMethod, sigFactory.newSignatureMethod(SignatureMethod.RSA_SHA1, null), references);
}

0 个答案:

没有答案