重复的 X509 证书

Duplicated X509Certificate

我正在尝试签署一个 XML 文件,出于某种原因,它在 <X509Data> 标签下添加了两个 <X509Certificate> 标签。 标签中的值不相同。 (见下面的例子)

<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;
}

如果您需要我post更多信息,请告诉我。

在 XML 签名中,预期包括签名证书和 证书链 以便收件人可以验证信任,直到根 CA 证书

XMLDsig standard

4.4.4 The X509Data Element

All certificates appearing in an X509Data element MUST relate to the validation key by either containing it or being part of a certification chain that terminates in a certificate containing the validation key.

如果您的新证书的证书链包含一个中间证书直到根证书,您在 X509Data 中看到两个证书是正常的

 root
   --intermediate1
       --leaf 

用编辑器打开证书可以查看(双击windows)

如果您想消除输出中的中间证书,请更改

new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot);

new KeyInfoX509Data(this.certificate, X509IncludeOption.EndCertOnly);

然后它将只写签名证书,而不是链(根除外)。