解决方案仅适用于 IIS >= 7.5
IIS 似乎不允许您通过 Web 应用程序的 web.config 来操作此设置。一种解决方法是创建一个(或多个)专用应用程序池,并配置应用程序池的 CLR 并禁用 FIPS 强制。IIS 7.5引入了CLRConfigFile https://www.iis.net/configreference/system.applicationhost/applicationpools/add可用于指定应用程序池的 .NET 配置文件的属性。这使我们能够更精细地控制配置影响哪些应用程序 - 而不是我们在 machine.config 或组策略设置中禁用它的霰弹枪方法。
1.创建配置文件,c:\inetpub\AppPoolClrConfig\noFipsWeb.config
,包含以下内容(文件的位置和名称并不重要):
<configuration>
<runtime>
<enforceFIPSPolicy enabled = "false" />
</runtime>
</configuration>
2.将文件的读取权限授予应用程序池运行的身份:
icacls c:\inetpub\AppPoolClrConfig\noFipsWeb.config /grant "IIS APPPOOL\YourAppPoolName":(R)
3.配置应用程序池以通过设置池的CLRConfigFile
财产:
cmd:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='{AppPoolName}'].CLRConfigFile:"{FilePath}" /commit:apphost
sample:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='YourAppPoolName'].CLRConfigFile:"c:\inetpub\AppPoolClrConfig\noFipsWeb.config" /commit:apphost
由于一个IIS 7.5 中的错误 https://blogs.msdn.microsoft.com/web_performance_blog/2012/02/29/asp-net-internals-managed-runtime-loader/,我们还需要清除managedRuntimeLoader
财产或其他CLRConfigFile
将被忽略:
%windir%\System32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /[name='YourAppPoolName'].managedRuntimeLoader:"" /commit:apphost
4.重新启动IIS。使用上述应用程序池的 Asp.NET 应用程序现在应该忽略 FIPS。
致谢:
斯科特·福赛思解释如何配置应用程序池以使用与标准 aspnet.config 文件不同的 CLR 文件 http://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool.
何塞·雷耶斯 (Jose Reyes) 负责记录IIS 7.5 中忽略 CLRConfigFile 属性的错误 https://blogs.msdn.microsoft.com/web_performance_blog/2012/02/29/asp-net-internals-managed-runtime-loader/