我正在尝试对一个XML文件进行签名,出于某种原因,它在<X509Data>标记下添加了两个<X509Data>标记。标记中的值并不相同。(见下文示例)
<KeyInfo>
<X509Data>
<X509Certificate>KJASHDJASHAHDJA</X509Certificate>
<X509Certificate>ASJKLDJASDJASDJKLASJDASJKDASA</X509Certificate>
</X509Data>
</KeyInfo>这种情况发生在我必须在旧证书过期后更改它(代码在此之前运行良好)之后。
用于获取密钥信息节点的代码:
private KeyInfo getKeyInfo()
{
KeyInfo keyInfo = new KeyInfo();
KeyInfoX509Data keyInfoX509Data = new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);
keyInfo.AddClause(keyInfoX509Data);
return keyInfo;
}如果您需要我发布更多的信息,请告诉我。
发布于 2017-07-19 14:54:15
如果要消除输出中的中间证书,请更改
new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);至
new KeyInfoX509Data(this.certificate, X509IncludeOption.EndCertOnly);然后,它将只编写签名证书,而不是链(除了根)。
发布于 2017-07-19 05:36:45
在XML签名中,需要包括签名证书和证书链,以便收件人能够验证信任直到根CA证书。
请参阅XMLDsig标准
4.4.4 X509Data元素 X509Data元素中出现的所有证书必须通过包含验证密钥或作为包含验证密钥的证书终止的证书链的一部分与验证密钥相关联。
如果新证书的证书链包含一个中间证书,直到根证书,则在X509Data中看到两个证书是正常的。
root
--intermediate1
--leaf 您可以检查它,用编辑器打开证书(在windows中双击)
https://stackoverflow.com/questions/45181313
复制相似问题