c#-验证签名的XML

时间:2019-03-15 11:01:43

标签: 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 个答案:

答案 0 :(得分:0)

根据文档,字节数组必须为二进制编码(DER格式)或Base64编码的X.509数据。您手上还有其他东西,这就是为什么构造函数无法处理您的数据的原因。

检查docs以获得更多信息。