2011-07-12 27 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