我正在使用 XMLDSIG签署配置文件。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。
如何从SignedXml
对象中获取签名证书?如何按照证书链返回特定 CA?
请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。
要将任意证书附加到 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
.