SignedXml.LoadXML((XmlElement)nodeList[0]) 抛出 "Malformed element SignedInfo/Reference"

SignedXml.LoadXML((XmlElement)nodeList[0]) throwing "Malformed element SignedInfo/Reference"

我在调用

时从签名文档的 XML 读取 SignedInfo 时遇到问题
SignedXml signedXml;
Directory.SetCurrentDirectory(TmpDir);
XmlDocument xmlDoc = new XmlDocument();

foreach(Relationship signature in signs)
{
   if(_InMemoryData.ContainsKey(signature.FilePath) || File.Exists(signature.FilePath))
    {
        using(Stream xmlStream = LoadDataItem(signature.FilePath))
        {
            xmlDoc.Load(xmlStream);
            XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Signature");
            if(nodeList.Count == 1)
            {
                signedXml = new SignedXml(xmlDoc);
                signedXml.LoadXml((XmlElement)nodeList[0]); //throws

在线 signedXml.LoadXml((XmlElement)nodeList[0]);它抛出异常消息“System.Security.Cryptography.CryptographicException:格式错误的元素SignedInfo/Reference”。

这个 XML 唯一奇怪的地方是它有 145 个收件人。但是其他软件可以毫无问题地读取它,所以我认为这不是问题。

搜索“格式错误的元素...”的异常主要表明元素的 Id 值中包含数字,这是不允许的。检查了其他类似的 XML 文件,它们都有数字,所以不应该是这样。

在一些设置和调试系统库之后,我发现了它抛出异常的地方,显然默认情况下它只允许 100 个收件人。要更改它,我需要将一个名为“SignedXmlMaxReferencesPerSignedInfo”的新注册表项添加到“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\Security”,并且它开始工作。