概要
在您安装任一3141780 安全更新程序后(Microsoft 安全公告 MS16-035 中提供了说明),.NET Framework 应用程序在处理包含 SignedXml 的文件时可能会遇到异常错误或意外失败。
更多信息
重要提示此部分(或称方法或任务)介绍了修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何在 Windows 中备份和还原注册表
情况 1
情况 1 症状
托管应用程序返回带有以下签名的错误异常:
System.Security.Cryptography.CryptographicException:Unable to resolve Uri [FileOrUrl].
示例
System.Security.Cryptography.CryptographicException:Unable to resolve Uri testfile.xml.
情况 1 解决方案
用户可以将以下注册表项应用到系统中:
注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security@SignedXmlAllowDetachedSignature=1
可供下载的 .Reg 文件
要解决此问题,请单击相应的链接,然后双击已下载的文件对注册表进行更改。
SignedXml-ExternalReferences.reg(32 位系统上的 32 位进程,64 位系统上的 64 位进程)
SignedXml-ExternalReferences.Wow6432.reg(64 位系统上的 32 位进程)
注意
-
此注册表项应为 DWORD 项。
-
此注册表项将还原之前打开或下载经验证可计算摘要的文档外部资源的行为。
警告 启用此注册表项可能会允许拒绝服务、分布式反射拒绝服务、信息泄露、签名绕过和远程执行代码等安全漏洞。
情况 2
情况 2 症状
成功后签名验证将失败。
情况 2 解决方案
如果内容包含以下签名块,请考虑应用提供的注册表项:
签名块示例
<Document>
…
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="...">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116" /></Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue>…</DigestValue> </Reference> </SignedInfo> <SignatureValue>…</SignatureValue> </Signature> …
</Document>
注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXPathTransform=http://www.w3.org/TR/1999/REC-xpath-19991116
可供下载的 .Reg 文件
要解决此问题,请单击相应的链接,然后双击已下载的文件对注册表进行更改。
XmlDSigXPathTransform.reg(32 位系统上的 32 位进程,64 位系统上的 64 位进程)
XmlDSigXPathTransform.Wow6432.reg(64 位系统上的 32 位进程)
如果签名块包含以下文本,请考虑应用提供的注册表项:
签名块示例
<Document>
…
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="...">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>…</DigestValue></Reference></SignedInfo><SignatureValue>…</SignatureValue></Signature>…
</Document>
注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXsltTransform=http://www.w3.org/TR/1999/REC-xslt-19991116
可供下载的 .Reg 文件
要解决此问题,请单击相应的链接,然后双击已下载的文件对注册表进行更改。
XmlDSigXsltTransform.reg(32 位系统上的 32 位进程,64 位系统上的 64 位进程)
XmlDSigXsltTransform.Wow6432.reg(64 位系统上的 32 位进程)
注意默认情况下,仅启用那些由 .NET Framework 提供且不接受来自已签名文档的输入的 XML 签名转换。若要启用接受输入的转换或自定义转换,必须将该转换的注册 URI 指定为此注册表项内的 REG_SZ 类型的值数据。值的名称未经处理,该名称可以是计算机管理员选择的任何名称。
警告 XPath 和 XSLT 转换允许文档发送者构建计算费用较高的文档。这可能会导致拒绝服务的情况。