Как проверить сертификат в SignedXml против машинного магазина - PullRequest
3 голосов
/ 12 июля 2011

Я бы хотел проверить подпись в 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();
}

Подпись проверяется нормально, но только против самой себя, а не против сертификатов, установленных на машине. Есть ли способ сравнить его с корневыми сертификатами в локальном хранилище сертификатов?

Ответы [ 2 ]

4 голосов
/ 16 июля 2011

Если кому-то интересно, я использовал метод 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 голосов
/ 15 июля 2011

Вы можете использовать перегрузку метода CheckSignature, который принимает AsymmetricAlgorithm.

Передайте открытый ключ вашего сертификата.Вы можете получить это через X509Store.

...