如何禁用强签名绕过功能

从 .NET Framework 版本 3.5 Service Pack 1(SP1)开始,将程序集加载到完全信任的AppDomain对象(例如MyComputer区域的默认AppDomain)时,将不再验证强名称签名。 这称为强名称绕过功能。 在完全信任环境中,对于签名的完整信任程序集的StrongNameIdentityPermission请求始终会成功,而不考虑其签名。 唯一的限制是,由于其所处的区域是完全受信任的,因此程序集必须是完全受信任的。 由于强名称在这些条件下不是确定因素,因此没有理由对其进行验证。 绕过强名称签名的验证可显著提高性能。

绕过功能适用于未延迟签名且从其AppDomain属性指定的目录中加载到任何完全信任ApplicationBase的程序集。

可以通过设置注册表项值来替代计算机上的所有应用程序的旁路功能。 可以使用应用程序配置文件替代单个应用程序的设置。 如果单个应用程序已被注册表项禁用,则无法恢复绕过功能。

当您覆盖绕过功能时,只会验证强名称的正确性,并不会检查它是否包含StrongNameIdentityPermission。 如果要确认特定的强名称,则必须单独执行该检查。

重要

强制强名称验证的能力取决于一个注册表项,步骤如下所述。 如果应用程序在没有访问控制列表(ACL)权限的帐户下运行,并且无法访问该注册表项,则该设置不会生效。 必须确保为这个密钥配置 ACL 权限,使其可被所有程序集读取。

为所有应用程序禁用强名称旁路功能

  • 在 32 位计算机上,在系统注册表中创建一个 DWORD 条目,其值在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 键下命名 AllowStrongNameBypass 为 0。

  • 在 64 位计算机上,在系统注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 和 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework 键下,创建一个名为 AllowStrongNameBypass 的 DWORD 条目,并将其值设置为 0。

为单个应用程序禁用强名称旁路功能

  1. 打开或创建应用程序配置文件。

    有关此文件的详细信息,请参阅 “配置应用”中的“应用程序配置文件”部分。

  2. 添加以下条目:

    <configuration>
      <runtime>
        <bypassTrustedAppStrongNames enabled="false" />
      </runtime>
    </configuration>
    

可以通过删除配置文件设置或通过将属性设置为 true 来还原应用程序的旁路功能。

注释

仅当为计算机启用了绕过功能时,才能为应用程序打开和关闭强名称验证。 如果计算机的旁路功能已关闭,则所有应用程序都需要进行强名称验证,且无法为单个应用程序绕过验证。

另请参阅