0

我在验证签名 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.

我究竟做错了什么?

4

1 回答 1

0

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

查看文档以获取更多信息。

于 2019-03-15T12:35:22.720 回答