我正在尝试签署一个XML文件,由于某种原因,它在<X509Certificate>
标记下添加了两个<X509Data>
标记。
标签中的值不相同。 (见下面的例子)
<KeyInfo>
<X509Data>
<X509Certificate>KJASHDJASHAHDJA</X509Certificate>
<X509Certificate>ASJKLDJASDJASDJKLASJDASJKDASA</X509Certificate>
</X509Data>
</KeyInfo>
这是在我过去之后必须更改旧证书之后发生的(代码之前的工作正常)。
我用来获取key-info节点的代码:
private KeyInfo getKeyInfo()
{
KeyInfo keyInfo = new KeyInfo();
KeyInfoX509Data keyInfoX509Data = new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);
keyInfo.AddClause(keyInfoX509Data);
return keyInfo;
}
如果您需要我发布更多信息,请告诉我。
答案 0 :(得分:2)
在XML签名中,预计包含签名证书和证书链,以便收件人可以验证信任,直到根CA证书
4.4.4 X509Data元素
出现在X509Data元素中的所有证书必须通过包含它或作为终止于包含验证密钥的证书的证书链的一部分与验证密钥相关。
如果新证书的认证链包含一个中间证书直到root,那么在X509Data中看到两个证书是正常的
root
--intermediate1
--leaf
您可以使用编辑器(在Windows中双击)检查它是否打开证书
答案 1 :(得分:1)
如果要删除输出中的中间证书,请更改
new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);
到
new KeyInfoX509Data(this.certificate, X509IncludeOption.EndCertOnly);
然后它只会写签名证书,而不是链(除了根目录)。