我在验证签名的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.
我在做什么错了?
答案 0 :(得分:0)
根据文档,字节数组必须为二进制编码(DER格式)或Base64编码的X.509数据。您手上还有其他东西,这就是为什么构造函数无法处理您的数据的原因。
检查docs以获得更多信息。