c# - c# - 验证签名的 XML
问题描述
我在验证签名 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.
我究竟做错了什么?
解决方案
根据文档,字节数组必须是二进制编码(DER 格式)或 Base64 编码的 X.509 数据。您手头有其他东西,这就是构造函数无法处理您的数据的原因。
查看文档以获取更多信息。
推荐阅读
- java - 如何使用 java 将 aspose 工作簿 (.xlsx) 保存到 aws s3?
- python - 带有参数的django重定向视图
- c# - 如何在 C# 8.0 中使用“只读”作为成员关键字?
- pdf - 如何防止 MacOS PreviewAPP 删除 PKCS7 签名
- go - Goland 调试器不适用于 mac 上的 go 版本升级(v1.11 -> v1.13)
- google-oauth - Google Oauth2 同意屏幕验证
- ios - 有没有办法在 tableview 上放置一个视图?
- javascript - KnockoutJS 混淆:是否有任何工具可以自动执行此操作?
- google-bigquery - 在 Google BigQuery 中的最近一个或多个日期上左加入
- ruby-on-rails - 在一个事务中在多态连接表中查找或创建嵌套属性