问题标签 [signedxml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6039 浏览

c# - C# 如何使用 SignedXml 使用 XAdES 正确签署消息?

我正在努力使用 XAdES 进行消息签名。我已经搜索了将我带到下面代码的解决方案。但是我试图连接的服务告诉我签名是错误的。我究竟做错了什么?

需要服务的消息应如下所示

消息的签名部分必须是:

0 投票
1 回答
319 浏览

c# - SignedXml.LoadXml() 引发 CryptographicException

我与外部 WebService 建立了连接,该服务运行了很长时间,直到 2018 年 5 月中旬。突然,我开始收到 CryptographicException 消息“格式错误的 XML 签名”。我的调查告诉我以下信息:

异常从 LoadXml(signature); 行抛出。在继承自 System.Security.Cryptography.Xml.SignedXml 的类中

这是代码:

到目前为止我学到的是:我和一位同事在两个不同版本的 windows 10 上本地测试了代码。他的版本比我的版本新。他得到了错误,而我没有。

代码处理的xml是一样的

该错误始于 2018 年 5 月 16 日,并且在该日期服务器安装了此安全更新https://support.microsoft.com/da-dk/help/4099635/security-and-quality-rollup-for-net-framework -3-5-4-5-2-4-6-4-6-1-4-6

我们知道之前的类似更新导致了类似的问题: https: //support.microsoft.com/en-us/help/3148821/after-you-apply-security-update-3141780-net-framework-applications-enc

有没有人知道如何解决这个问题(还有其他人遇到这个问题吗)?

PS。该代码在 Windows srv 2012 R2 上运行,并且该问题也存在于 Windows srv 2016 上

0 投票
1 回答
317 浏览

c# - CheckSignature 返回错误

我有一个问题,简单签名的 CheckSignature 总是失败。我正在使用 SignXml 对将存储为 MIME 附件的一些外部数据(在我的情况下是 AS4 有效负载的部分)进行签名。

这是代码(修改后的 MS 示例):

有谁知道我做错了什么?在旁注中,我知道我可以为其他参考指定转换。问题是,我如何获得 SignedXml 处理的引用结果,以便我也可以存储它?例如,如果我为参考转换指定压缩,我现在如何获得该压缩的结果?

0 投票
1 回答
946 浏览

c# - 生成无效数字签名的函数

我正在尝试使用 SHA-1 算法对 XML 文档进行数字签名,但生成的签名 XML 中包含 SHA-256 部分。我看到了这个问题并试图将其调整为我的函数,但它不起作用,因为它在生成的 XML 上同时引用了 SHA-1 和 SHA-256。

这是我的实际代码:

如何使这个函数像 SHA1 一样签名?
以下是输出签名的示例:


编辑

使用建议的代码,它在以下行返回错误 Reference reference = new Reference($"#{list[0].Attributes["id"].Value}");

NullReferenceException:对象引用未设置为对象的实例。

我以这种方式使用该功能:

这是我与函数一起使用的 XML 文件的示例:

0 投票
1 回答
152 浏览

c# - C# 使用 X509Chain 签署 XML 文档

我有一个关于XmlDocument使用证书链签名的问题。我目前的尝试是分别加载根证书、中间证书和签名证书,并将它们添加到KeyInfoX509DataKeyInfo中。

像这样的东西。然后我用变量分配SignedXml KeyInfo属性。keyInfo然后我调用该.ComputeSignature()方法。我的问题是 - 这是签署 xml 消息的正确方法,还是最近我发现了 class X509Chain,我必须以某种方式使用,因为我想用整个链签署 xml。

提前致谢,

朱利安

0 投票
2 回答
2175 浏览

c# - C# UBL 2.1 签名

我需要使用 c# 签署 UBL 2.1 发票。问题是,签名后我需要Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"嵌入

一个 UBLExtensions 元素,像这样

我稍后尝试添加这些元素,但签名被认为无效。

我没有任何签署 XML 文件的经验,因此非常感谢任何帮助

编辑

初始 XML 文件是

我需要制作类似的东西

如果我稍后添加这些元素,签名将被视为无效。

同样,任何帮助都将受到高度赞赏。

实际签名文件的链接是这个: signed_xml

0 投票
1 回答
169 浏览

c# - c# - 验证签名的 XML

我在验证签名 XML 时遇到问题。也许你可以帮助我:)

我有一个 ASP.NET MVC 服务,它接收一个 XML,我需要验证这个 XML 中的签名是否有效。

我用于验证的证书如下所示:

cert.crt 文件:

我的签名验证代码:

XML 由以下人员签署:

这条线

引发错误

我究竟做错了什么?

0 投票
1 回答
105 浏览

vb.net - VB.Net signedXml“Base-64 字符串中的无效字符”

每次我尝试将 XML 文件上传到特定服务器时都会出现错误。它返回“Base-64 字符串中的无效字符”。这是我用来签名的代码:

还有什么我应该添加到代码中的吗?该手册告诉我遵循https://www.w3.org/TR/xmldsig-core/的说明

0 投票
1 回答
295 浏览

.net - 单元测试 AppContext 开关

更改日志

  • 重命名问题:AppContext Switch Failing In Unit Test (CryptographicException: Invalid Algorithm Specified)
  • 在进行更多调查后,在底部添加了进一步详细说明问题的部分
  • 在底部添加了解释我已实施的解决方法的部分

我有一段代码,我正在编写用于签署一些 xml 的单元测试。

我注意到在开发 .NET 4.7.1+ 将抛出的代码时CryptographicException: Invalid algorithm specified。为了解决这个问题,我使用了以下AppContext开关(来源:wiktor zychla为什么我指定了无效的算法......)。

我已将以下代码放入任何调用我的 xml 签名代码的应用程序中:

在野外运行时,此代码运行正常,并且我的 xml 正在按预期进行签名。

我已经为这段代码编写了一些单元测试,这是我第一次真正尝试编写单元测试,我遇到了一些奇怪的边缘情况。

因此,如果抛出异常,我会显示一条很好的消息,说请在调用此方法之前添加以下代码。

我的测试类看起来像这样:

当我运行SignXML_AppContextSwitchSet_Success我希望自己通过的时候,测试每次都通过(只是我反复运行它)。如果我清理我的解决方案并运行所有测试,测试总是失败。

我的 xml 生成类没有共享对象,它实际上可能是静态的。

测试失败是因为抛出了加密异常(触发我的代码并抛出异常告诉开发人员(我)添加应用程序上下文切换)。

有没有办法验证配置开关是否得到尊重?

从我的控制台测试器应用程序和我内置的 wpf 应用程序运行代码时,永远不会抛出异常。只有当我背靠背运行所有单元测试时才会抛出它。我希望这些测试在 azure 管道上运行,因此它可以同时运行和单独运行很重要。

我对这个例外的想法是,也许当我一起运行所有测试时,AppContext开关没有得到尊重。我尝试在签署 xml 之前添加检查:

现在您希望此代码无法通过我的失败测试(未设置开关)并且确实如此,您可以NotImplementedException在测试资源管理器中看到我的粗略消息。然而,我期望成功的测试CryptographicException再次引发......

正如我之前所说,我对测试非常陌生,我不确定我的测试设计方法是否错误,如果我只是在测试一些底层代码,所以也许我注定要尝试测试它或我缺少一些东西来允许对这种情况进行正确测试。

我目前正在使用NUnit 3.12.0 + NUnit3TestAdapter 3.15.1编写测试,尽管我最初使用MSTest 1.3.2并体验了使用这两个框架的相同行为。


更新

我发现以下测试的执行顺序决定了成功:

  • SignXML_AppContextSwitchNotSet_Fail
  • SignXML_AppContextSwitchSet_Success

我通过阅读诸如(单元测试在全部运行时失败,但在单独运行时通过)在不单独运行时测试失败的帖子发现了这一点。

它让我想到了正在设置的值,我想要以下情况:

尽管我已经测试了这些值是否正确设置,但底层开关是否正在更新?如何清理这些底层对象?


解决方法/“讨厌”修复

我在NUnit 的 GitHub (appdomain per test (isolation per test), for handling static classes)上发现了以下问题。在这个线程中,他们讨论了AppDomain每个测试的新选项,这正是我所需要的。

沿着线程jnm2发布一个 util 类以单独运行代码AppDomain代码)(我不会在这里发布它,因为这篇文章已经很庞大了)。我采用了这个 util 类并调整了我的测试以使用它(你不能使用任何类变量或方法,这意味着我必须复制我的辅助方法代码)。

一旦我实现了 util 并调整了我的测试以符合它的标准,当我单独运行它们时测试开始通过,并且一次全部运行。

任务完成!

0 投票
0 回答
36 浏览

c# - 不规则的参考元素偶尔出现

我正在尝试验证 xml 的签名,我偶尔会遇到格式错误的引用元素。当我尝试更仔细地调试时,我查看了失败的 XML,getidelement 正在为失败的那些返回 null。所有签名的 XML 都是从单个服务器生成的,另一个服务器验证签名。有人可以为什么它对一些 XML 失败。

谢谢,巴斯卡。