7

我遇到了 ASP.NET 2.0 应用程序的问题。我们的网络人员刚刚提高了我们的安全性,现在每当我尝试访问该应用程序时都会出现以下错误:

“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。”

我做了一些研究,听起来 ASP.NET 使用 RijndaelManaged AES 加密算法来加密页面的 ViewState ......并且 RijndaelManaged 在不符合 FIPS 的算法列表中。我们当然没有明确地调用任何加密算法......更不用说不合规列表上的任何东西了。

我猜这个 ViewState 业务对我来说很有意义。不过,我无法混淆的是如何处理它。我发现一篇知识库文章建议使用 web.config 设置来指定不同的算法......但要么没有坚持,要么该算法不符合标准。

所以:

1) RijndaelManaged / ViewState 真的是问题吗?还是我在叫错树?

2) 如何指定使用什么算法而不是 RijndaelManaged?我有一份符合和不符合要求的算法列表;我只是不确定在哪里插入这些信息。

谢谢!

理查德

4

8 回答 8

5

仔细检查<compilation debug="true" />您的 Web.config 中没有。设置调试编译时,.NET 使用 MD5 散列进行一些内部簿记。MD5 不符合 FIPS,因此您会收到此错误。

于 2009-10-24T18:04:02.223 回答
2

Source: http://blogs.msdn.com/b/shawnfa/archive/2008/03/14/disabling-the-fips-algorithm-check.aspx

You could add the following to your web.config or machine config so your ASP.Net applications will stop failing due to the FIPs compliance checks.

<configuration>   

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

Your machine.config can be found here: \Microsoft.NET\Framework\\config\machine.config

If you change your machine.config, an iisreset may be required for the settings to take effect. Note: changing your maching.config will effect all .NET applications on the system.


To get your application to be FIPs compliant without having to disable FIPs, you can try the following:

1) Configure your machine key to use 3DES for decryption and SHA1 for validation.

EDIT (2018-04-05): The new IIS8.5 STIG says you should set your Machine Key settings to Validation: HMACSHA256, Encryption: Auto.

<configuration>
<system.web>
    <authentication mode="Windows" />
    <machineKey decryption="3DES" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" validationKey="AutoGenerate,IsolateApps" />
</system.web>
</configuration>

NOTE: if you are using a web farm environment, you can use IIS GUI and go to the Machine Keys configuration section to generate a set of keys and use the same keys across your web farm.

2) Ensure that your compilation debug="false", and all page directives have debug="false". Setting debug to true will also kick off the FIPs compliance check.

于 2010-05-26T05:41:15.830 回答
2

关于您的第二个问题:也许这篇MSDN 文章有帮助。

根据文档,您可以像这样配置加密算法:

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>

对于验证,您可以使用以下方法之一:[SHA1 | MD5 | 3DES | AES]

对于解密,您可以使用以下之一:[Auto | DES | 3DES | AES]

因此,为了符合 FIPS,您可以使用 3DES(尽管 AFAIK 理论上不太安全)。

于 2008-12-19T12:40:10.943 回答
1

您还需要在包装盒上执行此操作

执行 FIPS 认证的密码学

于 2008-12-22T14:48:34.207 回答
0

某些站点(例如 SharePoint 站点)在 Web 配置中已经具有 SHA1 机器密钥,因此请检查是否已经存在算法,如果有删除它并添加以上内容。

于 2010-02-04T20:04:33.057 回答
0

我们已经尝试过您建议的 machineKey。它对一些 Web 应用程序(与 配对时)有帮助,这很棒,但不是全部,这令人沮丧。

我错过了一些东西,但如果我能说出什么,我会很高兴。

于 2008-12-22T14:42:24.733 回答
0

就我所见,viewstate machine key 和 compilation="debug" 配置问题是导致此问题的最常见原因。据我所知,在 .NET 2.0 中,用于视图状态验证/加密的 3DES 算法是唯一符合 FIPS 的算法。所以 SHA1、MD5 和 AES 选项在那里不起作用。

同样重要的是要意识到,如果代码中引用了任何不符合 FIPS 的算法,即使从未实际使用过/无法访问,也会导致 FIPS 合规性错误。例如,仅声明一个 MD5CryptoServiceProvider 变量而不实例化它会导致错误。这包括其他引用的 .NET 程序集,因此请确保没有引用的 dll 也可能使用不符合 fips 的算法。

这是一个方便的站点,列出了 .NET 中的所有 FIPS 和非 FIPS 算法 http://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html

于 2010-06-29T03:04:22.083 回答
0

根据这个答案 ,对于 Cryptography 命名空间中的算法,没有任何托管实现是 FIPS 认证的。

使用非托管实现应该可以解决您的问题:Rijnaed 是 AES 的前身 - 也许尝试AesCng

非托管实现的缺点是它们可能与旧版本的 windows 不兼容

于 2018-08-29T11:14:09.493 回答