2011-07-12 6 views
3

SignedXmlの署名をマシンストアの証明書と照合して確認したいと思います。しかし、唯一自体に対してではなく、マシンにインストールされている証明書に対して、機械ストアに対する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(); 
} 

署名が細かい検証します。このコードは、署名を検証するために使用されます。ローカル証明書ストアのルート証明書と照合する方法はありますか?

答えて

3

興味があれば、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; 
0

AsymmetricAlgorithmをとるCheckSignatureメソッドのオーバーロードを使用できます。

証明書の公開鍵を渡します。これはX509Store経由で取得できます。

+0

おそらくあまりにも仕事ができることが、私は使用する証明書事前に知っていないとして、私は 'SignedXml'からそれを取得する必要がありますとにかく 'CheckSignature(X509Certificate2、Boolean)'を使う代わりに、店を混乱させる必要はありません。とにかくおかげで。 – Tetaxa

関連する問題