gpt4 book ai didi

c# - SignedXml.LoadXml() 抛出 CryptographicException

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:17 39 4
gpt4 key购买 nike

我连接到一个外部 Web 服务,该服务在 2018 年 5 月中旬之前一直完美无缺地运行。突然间,我开始收到带有消息“格式错误的 XML 签名”的 CryptographicException。我的调查告诉我以下内容:

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

代码如下:

public bool CheckAssertionSignature()
{
if (Xml == null || Xml.DocumentElement == null)
return false;

var xmlass = Xml.DocumentElement.LocalName == "Assertion" ? Xml.DocumentElement : Xml.GetElementsByTagName("Assertion", Namespaces.Saml)[0] as XmlElement;
var signature = xmlass.GetElementsByTagName("Signature", Namespaces.Ds)[0] as XmlElement;
if (signature == null) return false;
LoadXml(signature);
var cert = KeyInfo.Cast<KeyInfoX509Data>().Select(d => d.Certificates[0] as X509Certificate2).FirstOrDefault(c => c != null);

return cert != null && CheckSignature(cert, true);
}

到目前为止我学到的是:我和一位同事在两个不同版本的 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

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

附言。代码在 Windows srv 2012 R2 上运行,问题也存在于 windows srv 2016

最佳答案

我们找到了解决方案!似乎 System.Security 更新已强制对 XML 签名进行更严格的验证。

在我们收到的 XML 中,Signature 元素的 id 属性写为“id”。根据 XML 签名架构 ( http://www.w3.org/2000/09/xmldsig# ),它应该是“Id”。安全更新之前的 LoadXml 方法没有抛出这个问题,但是在它之后。

由于收到的 XML 带有不合适的属性,我们创建了以下解决方法来更改属性:

if (signature.Attributes.GetNamedItem("id") is XmlAttribute oldId)
{
signature.Attributes.Remove(oldId);
if (signature.OwnerDocument != null)
{
var newId = signature.OwnerDocument.CreateAttribute("Id");
newId.Value = oldId.Value;
signature.Attributes.Append(newId);
}
}

虽然我们不明白为什么验证应该如此严格,但只有“Id”被验证为正常……尽管如此,我怀疑我们能否联系到 Microsoft,将其回滚 :D

关于c# - SignedXml.LoadXml() 抛出 CryptographicException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036448/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com