XMLDSig 中真的考虑了证书的哈希算法吗?
Is certificates's hash algorithm really taken to account in XMLDSig?
我有两个 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 变量)并且验证结果正常。看起来签名和验证程序从适当的 xml 标签中获取算法名称,这听起来不错,但是 如果没有意义,在 p12 文件中指定签名哈希算法有什么意义 ?
唯一的解释是创建 PKCS7 签名,其中通常不指定哈希算法,它可能取自 p12。
所以,我的假设如下:
在 xml 中,签名标签值很重要(在转换中指定),p12 哈希算法无关紧要。在 pkcs7 或开发人员未指定从 p12 获取的哈希算法的其他情况下。我说得对吗?
您没有在此处指定证书的哈希算法。那已经指定了。您正在指定用于签名的哈希算法。
我有两个 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 变量)并且验证结果正常。看起来签名和验证程序从适当的 xml 标签中获取算法名称,这听起来不错,但是 如果没有意义,在 p12 文件中指定签名哈希算法有什么意义 ?
唯一的解释是创建 PKCS7 签名,其中通常不指定哈希算法,它可能取自 p12。
所以,我的假设如下:
在 xml 中,签名标签值很重要(在转换中指定),p12 哈希算法无关紧要。在 pkcs7 或开发人员未指定从 p12 获取的哈希算法的其他情况下。我说得对吗?
您没有在此处指定证书的哈希算法。那已经指定了。您正在指定用于签名的哈希算法。