【发布时间】:2015-05-24 16:39:26
【问题描述】:
我有两个 pkcs12 容器,其中一个具有 sha1 哈希算法,另一个具有 sha256。
我正在使用标准方式签署 xml:
String signMethod = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256";
String digestMethod = "http://www.w3.org/2001/04/xmlenc#sha256";
if (doc.getFirstChild() != null) {
doc.getFirstChild().appendChild(sig.getElement());
Transforms transforms = new Transforms(doc);
transforms.addTransform("http://www.w3.org/2000/09/xmldsig#enveloped-signature");
transforms.addTransform("http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments");
sig.addDocument("", transforms, digestMethod);
sig.addKeyInfo((X509Certificate) cert);
sig.sign(privateKey);
}
我用“sha1 key”签署了一些xml,但在代码sha-256中指定(检查signMethod和digestMethod变量)并且验证结果是OK的。看起来签名和验证程序从适当的 xml 标签中获取算法名称,这听起来不错,但是 如果没有意义,在 p12 文件中指定签名哈希算法有什么意义?
唯一的解释是创建 PKCS7 签名,其中通常不指定哈希算法,它可能取自 p12。
所以,我的假设如下:
在 xml 签名标签值很重要(在转换中指定),p12 哈希算法无关紧要。在 pkcs7 或其他开发人员未指定哈希算法的情况下,它取自 p12。我说的对吗?
【问题讨论】:
标签: java xml hash xml-signature