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 に答える