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