2

我正在使用 XMLDSIG签署配置文件。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。

如何从SignedXml对象中获取签名证书?如何按照证书链返回特定 CA?

请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。

4

1 回答 1

2

要将任意证书附加到 XML-DSIG 文件,请添加<X509Data>元素. 要在 .NET 中执行此操作,请使用:

signedXml.KeyInfo.AddClause(
    new KeyInfoX509Data(certificate, X509IncludeOption.WholeChain));

要从 XML 文件中提取证书,请使用:

var certificates = signedXml.KeyInfo.OfType<KeyInfoX509Data>().Single();

然后,您可以使用以下方法验证链:

var chain = new X509Chain();
chain.ChainPolicy.ExtraStore.AddRange(
    certificates.Cast<X509Certificate2>().ToArray());
var chainIsOk = chain.Build(signingCertificate);

要找出实际用于签名的证书(以及 的值signingCertificate),您需要找到CheckSignatureReturningKey.

于 2012-02-09T15:33:05.950 回答