签署由 jwt 和 tls 保护的分离的 xml

问题描述

我在签署 XML 文档时遇到问题。我需要像在这个 url 中制作的那样签署外部(分离的)文档: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.xml.signedxml.computesignature?view=net-5.0 此示例适用于我的代码,但是,我的 xml 文档由 JWT 和 TLS 证书保护,因此当我尝试计算签名时,我遇到异常“无法创建安全的 ssl/tls 通道”:/ 当我尝试在服务器上创建 get 请求并且当我附加 tls 证书问题解决时,我遇到了类似的错误。不幸的是,我不知道在这种情况下如何附加 jwt 令牌和 tls(在签名机制中):/

解决方法

所以...经过一个小时的工作,我找到了一些解决方案。 问题出在 System.Security.Cryptography.Xml 参考类中。在这个类中,当引用一些外部 xml 时,方法 GetHash 发出简单的 GET 请求,你不能签署你自己的解析器。 不幸的是,我无法编辑 System.Security.Cryptography .dll。 但是我可以编辑 Medicom.XADES,所以在 BuildDigestedReferences 方法中我需要注释这一行: //object m_ containsDocument = SignedXml_m_ containsDocument.GetValue(this); //Reference_UpdateHashValue.Invoke(reference2,new object[] { m_ containsDocument,refList });

并准备我自己的 DigestValue 以供参考:

reference2.DigestValue = GetHashXML(reference2); 

其中 GetHashXML(Reference reference) 是向外部(由 ssl/tls 保护)xml 发出请求,然后计算 SHA256 哈希值并通过 BYTE 将其值返回给 reference2.DigestValue 的方法

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...