3

我想SignedXml根据机器商店中的证书验证签名。此代码用于验证签名:

internal bool VerifySignature(XmlDocument xml)
{
    var signedXml = new SignedXml(xml);
    var nsMgr = new XmlNamespaceManager(xml.NameTable);
    nsMgr.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");
    signedXml.LoadXml((XmlElement)xml.SelectSingleNode("//ds:Signature", nsMgr));
    return signedXml.CheckSignature();
}

签名验证正常,但仅针对自身,而不针对机器上安装的证书。有没有办法根据本地证书存储中的根证书检查它?

4

2 回答 2

4

如果有人感兴趣,我使用了该CheckSignature(X509Certificate2, Boolean)方法。我从Signature对象中获得了证书并像这样检查它:

var x509data = signedXml.Signature.KeyInfo.OfType<KeyInfoX509Data>().First();
var verified = false;
if(x509data != null)
{
    var cert = x509data.Certificates[0] as X509Certificate2;
    verified = cert != null && signedXml.CheckSignature(cert, false);
}
return verified;
于 2011-07-16T08:12:26.113 回答
0

您可以使用采用 AsymmetricAlgorithm 的 CheckSignature 方法的重载。

传递证书的公钥。您可以通过 X509Store 获取它。

于 2011-07-15T14:13:43.333 回答