4

我想在 asp .net x64 应用程序中禁用 fips。在 web.config 我添加

<runtime>
    <enforceFIPSPolicy enabled = "false">
</runtime>

我将调试设置为假。

但是我的应用程序不起作用。我应该在 < configSections > 中声明运行时部分吗?如果是,那么这是一条正确的路线

<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
4

1 回答 1

7

解决方案仅适用于 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 属性的错误

于 2016-08-10T08:17:21.673 回答