c # - проверка подписанного XML - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема с проверкой подписанного XML.Может быть, вы можете мне помочь:)

У меня есть служба ASP.NET MVC, которая получает XML, и мне нужно проверить, действительна ли подпись в этом XML.

Сертификат, который я используюдля проверки выглядит так:

файл cert.crt:

-----BEGIN CERTIFICATE-----
MIIDcjCCAlqgAwIBAgIFALVBJRQwDQYJKoZIhvcNAQEFBQAwaTELMAkGA1UEBhMCREUxDz ............
-----END CERTIFICATE-----

Мой код для проверки подписи:

var xmlDoc = new XmlDocument { PreserveWhitespace = true };
xmlDoc.LoadXml(samlXML);

var signedXml = new SignedXml(xmlDoc);

var certPath = HostingEnvironment.MapPath(@"~/App_Data/cert.crt");
var readAllBytes = File.ReadAllBytes(certPath);

X509Certificate2 certificate = new X509Certificate2(readAllBytes);

XmlNodeList signatureElement = xmlDoc.GetElementsByTagName("ds:Signature");
signedXml.LoadXml((XmlElement)signatureElement[0]);

var isValid = signedXml.CheckSignature(certificate, true);

XML подписан:

<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>

Эта строка

X509Certificate2 certificate = new X509Certificate2(readAllBytes);

Выдает ошибку

Object was not found.

Что я делаю не так?

1 Ответ

0 голосов
/ 15 марта 2019

Согласно документам, байтовый массив должен быть либо двоично-кодированным (формат DER), либо Base64-кодированными данными X.509.У вас есть что-то еще, поэтому конструктор не может обрабатывать ваши данные.

Проверьте документы для получения дополнительной информации.

...