2
我正在使用XMLDSIG到sign a configuration file。我希望我的CA能够发行可用于签署XML的密钥。然后我想验证XML是否使用我的CA颁发的密钥签名。在.NET中验证XMLDSIG链?
如何从SignedXml
对象中获取签名证书?我如何遵循证书链返回特定的CA?
请注意,我的CA的公钥将存储在我的可执行文件中,而不是证书存储区中。
我正在使用XMLDSIG到sign a configuration file。我希望我的CA能够发行可用于签署XML的密钥。然后我想验证XML是否使用我的CA颁发的密钥签名。在.NET中验证XMLDSIG链?
如何从SignedXml
对象中获取签名证书?我如何遵循证书链返回特定的CA?
请注意,我的CA的公钥将存储在我的可执行文件中,而不是证书存储区中。
要将任意证书附加到XML-DSIG文件,请添加<X509Data>
element。要做到这一点在.NET中,使用方法:
signedXml.KeyInfo.AddClause(
new KeyInfoX509Data(certificate, X509IncludeOption.WholeChain));
从XML文件中提取证书,用途:
var chain = new X509Chain();
chain.ChainPolicy.ExtraStore.AddRange(
certificates.Cast<X509Certificate2>().ToArray());
var chainIsOk = chain.Build(signingCertificate);
:
var certificates = signedXml.KeyInfo.OfType<KeyInfoX509Data>().Single();
然后,您可以通过以下验证链
要找出哪个证书实际用于签名(因此值为signingCertificate
),您需要找到matches the key从返回的已包含证书。
刚刚救了我一天的研究。 :) – Spence 2012-05-25 04:57:37
@Spence更像是3-4天:) – 2012-05-25 05:57:30