【发布时间】:2012-02-06 14:42:16
【问题描述】:
我正在使用 XMLDSIG 到 sign a configuration file。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。
如何从SignedXml 对象中获取签名证书?如何按照证书链返回特定 CA?
请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。
【问题讨论】:
我正在使用 XMLDSIG 到 sign a configuration file。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。
如何从SignedXml 对象中获取签名证书?如何按照证书链返回特定 CA?
请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。
【问题讨论】:
要将任意证书附加到 XML-DSIG 文件,请添加 <X509Data> element。要在 .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 的值),您需要找到 matches the key 从 CheckSignatureReturningKey 返回的包含证书。
【讨论】: