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 获取的哈希算法的其他情况下。我说得对吗?

您没有在此处指定证书的哈希算法。那已经指定了。您正在指定用于签名的哈希算法。