解决方案仅适用于 IIS >= 7.5
IIS 似乎不允许您通过 Web 应用程序的 web.config 操作此设置。一种解决方法是创建一个(或多个)专用应用程序池,并在禁用 FIPS 强制的情况下配置应用程序池的 CLR。 IIS 7.5 引入了一个 CLRConfigFile属性,可用于指定应用程序池的 .NET 配置文件。这使我们能够更精细地控制配置影响的应用程序 - 而不是我们在 machine.config 或组策略设置中禁用它的霰弹枪方法。
1.创建一个配置文件,c:\inetpub\AppPoolClrConfig\noFipsWeb.config
,内容如下(文件的位置和名称无关紧要):
<configuration>
<runtime>
<enforceFIPSPolicy enabled = "false" />
</runtime>
</configuration>
2.将文件的读取权限授予App Pool运行的身份:
icacls c:\inetpub\AppPoolClrConfig\noFipsWeb.config /grant "IIS APPPOOL\YourAppPoolName":(R)
3.通过设置池的CLRConfigFile
属性配置应用程序池以加载此配置文件:
命令:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='{AppPoolName}'].CLRConfigFile:"{FilePath}" /commit:apphost
样本:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='YourAppPoolName'].CLRConfigFile:"c:\inetpub\AppPoolClrConfig\noFipsWeb.config" /commit:apphost
由于IIS 7.5 中的错误,我们还需要清除该managedRuntimeLoader
属性,否则CLRConfigFile
将被忽略:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='YourAppPoolName'].managedRuntimeLoader:"" /commit:apphost
4.重启IIS。使用上述应用程序池的 Asp.NET 应用程序现在应该忽略 FIPS。
学分:
Scott Forsyth 解释了如何配置应用程序池以使用与标准 aspnet.config 文件不同的 CLR 文件。
Jose Reyes 记录了 IIS 7.5 中忽略 CLRConfigFile 属性的错误