#c# #xml #asp.net-mvc #signedxml
#c# #xml #asp.net-mvc #signedxml
Вопрос:
У меня проблема с проверкой подписанного 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. Проверяли ли вы CertPath, правильный ли он и находится ли там файл?
2. @ShinoLex да, строка
var readAllBytes = File.ReadAllBytes(certPath);
работает нормально
Ответ №1:
Согласно документам, массив байтов должен быть либо в двоичной кодировке (формат DER), либо в кодировке X.509 в формате Base64. У вас есть что-то еще на руках, поэтому конструктор не может обработать ваши данные.
Проверьте документы для получения дополнительной информации.