【问题标题】:DotNetOpenAuth and FIPS Server ErrorDotNetOpenAuth 和 FIPS 服务器错误
【发布时间】:2013-10-01 00:59:27
【问题描述】:

我目前正在使用 DotNetOpenAuth v4.1.0.12182 来执行简单的 Relying Party 功能,并且能够在不添加任何内容的情况下使其正常工作(经过 Google 和 Yahoo 测试) web.config 条目。但是,此站点将部署到启用了以下设置的 Web 服务器上:

  1. 转到控制面板 > 管理工具 > 本地安全策略
  2. 找到设置“系统加密:使用符合 FIPS 的算法...”并将其设置为已启用

如果不启用此功能,网站可以正常工作。启用此功能后,我收到服务器错误“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分”。我确实在 dotnetopenauth v4-0 beta 版本页面上找到了信息,其中提到,从 DotNetOpenAuth 4.0 版本开始,其中一项更改是“现在可以在您的 .config 文件中配置符合 FIPS 的 SHA 算法。”

我需要什么帮助...

我想知道我需要进行哪些配置更改才能消除此 FIPS 消息/错误。我查看了 [http://www.dotnetopenauth.net/developers/help/configuration-options/][2],但找不到任何关于 FIPS 相关内容的明确说明。任何帮助将不胜感激,谢谢!

更新(2012 年 7 月 10 日)

我提供了我重新采取的步骤,以便可以复制错误:

  1. 我使用了相当全新的 Server 2008 R2 Enterprise 安装(已经安装了 VS 2010,也许还有一些更新)
  2. 添加了 Web 服务器角色
  3. 添加了 .NET Framework 3.5.1 功能
  4. 启用本地安全策略:系统加密:使用符合 FIPS 的算法进行加密、散列和签名
  5. 重新启动服务器
  6. 编译/构建了 OpenIdRelyingPartyWebForms 示例并将其发布为用作本地 IIS 网站
  7. 遇到 URI 错误,导致我必须将应用程序池设置为使用 ASP.NET v4.0
  8. 遇到另一个错误,导致我不得不“强制安装 .NET 4”:http://devonenote.com/2010/06/could-not-load-type-system-servicemodel-activation-httpmodule/
  9. 现在“依赖方”网页终于呈现出来了,所以我点击了仅限会员链接,然后点击了使用 Yahoo ID 登录选项
  10. 在处理它大约 2-3 秒暂停后,我收到:

[InvalidOperationException:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。]
System.Security.Cryptography.SHA512Managed..ctor() +4479214

[TargetInvocationException:调用目标抛出异常。] 尝试执行 System.Security.Cryptography。SHA512。创建 +11,然后创建 System .Security.Cryptography.CryptoConfig.CreateFromName +1195

[TypeInitializationException:“DotNetOpenAuth.OpenId.HmacShaAssociation”的类型初始化程序引发异常。] DotNetOpenAuth.OpenId.HmacShaAssociation.TryFindBestAssociation (cs:134)

故障排除步骤...

  1. 在标签下的 Framework64/v4.0.30319/Config/machine.config 中添加了配置条目(基于 Andrew 提供的链接)。但是,由于我还没有在任何地方添加 Security.Cryptogrophy DLL,所以我从配置中删除了这些行(处理 HMACSHA512 的行)。
  2. 重启机器
  3. 浏览返回并单击使用 Yahoo ID 登录按钮

[InvalidOperationException:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。]
System.Security.Cryptography.SHA384Managed..ctor() +4486510

[TargetInvocationException:调用目标抛出异常。] 尝试执行 System.Security.Cryptography。SHA384。创建 +11,然后创建 System .Security.Cryptography.CryptoConfig.CreateFromName +1195

[TypeInitializationException:“DotNetOpenAuth.OpenId.HmacShaAssociation”的类型初始化程序引发异常。] DotNetOpenAuth.OpenId.HmacShaAssociation.TryFindBestAssociation (cs:134)

我注意到现在它抱怨的是 SHA384 而不是 SHA512,所以 SHA512 的 machine.config 条目(告诉 ASP.NET 使用 System.Core 中的 SHA512Cng 类)必须工作!

接下来我继续添加 SHA384 和 SHA256 条目,执行 iisreset,然后浏览并单击使用 Yahoo ID 登录按钮。这次我终于被重定向到雅虎,登录,并被发送回我的本地主机 URL,但收到了这个 FIPS 错误:

[InvalidOperationException:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。] System.Security.Cryptography.HMACSHA256..ctor(Byte[] key) +4491026

所以现在我继续进行以下操作:

  1. 添加到 HMACSHA512 machine.config 行中,我最初取出并为 HMACSHA256 复制了它
  2. 根据MSDN blog,从 Andrew 对 GAC (windows\assembly) 的回复中引用的 codeplex 项目添加了 Security.Cryptography.dll 文件
  3. 重启机器
  4. 再次浏览并单击 Yahoo 按钮,但收到相同的错误

似乎新的 Cryptography DLL 没有被 ASP.NET “拾取”并使用。所以,接下来我尝试了:

  1. 从 GAC 中删除 DLL
  2. 重启机器
  3. 添加 Cryptography DLL 作为对 OpenIdRelyingPartyWebForms 示例的引用并重新编译和发布它,覆盖现有的 IIS 网站文件
  4. 再次浏览并单击 Yahoo 按钮,但收到相同的错误

关于如何使用 HMACSHA256 解决这个问题的任何想法?

【问题讨论】:

    标签: dotnetopenauth


    【解决方案1】:

    您需要配置 .NET 本身以创建所需算法的 FIPS 兼容版本。请查看此previously filed and fixed issue,包括 cmets,以获取有关如何继续的指导。

    【讨论】:

    • 也许我遗漏了一些东西,但我已经阅读了参考资料并完成了以下操作:(1)将 clrsecurity CodePlex 项目中的 Security.Cryptography.dll 添加到我的 Web 应用程序 VS 项目中(2 ) 在 Devenv.exe.config 中添加了 以防止 VS 在编译时抛出错误,(3) 在我的 /Framework/ 的 Machine.config 中添加了 块V2.0.50727 和 /Framework/v4.0.30319 版本(我的应用程序面向 .NET 3.5) (4) 将站点发布到我的开发 IIS 并仍然收到有关 FIPS 的 Parset 错误
    • 我还重新启动了我的机器以确保更改/设置生效,但我仍然收到“'/'应用程序中的服务器错误”-解析器错误消息:此实现不是Windows 平台 FIPS 验证的密码算法。它是说源是我的 default.aspx 页面上的第 1 行(它没有使用任何 DotNetOpenAuth 类),这是页面声明行。
    • 此后,我还将 块添加到 .NET v2 和 v4 的 Framework64 文件夹中,并将 Security.Cryptography.dll 部署到 GAC,而不是作为我网站中的 [bin] 引用项目。现在我只在我的 login.aspx 页面(它确实调用 DotNetOpenAuth 类)上收到 FIPS 错误,原因如下:[TypeInitializationException:'DotNetOpenAuth.OpenId.HmacShaAssociation' 的类型初始化程序抛出异常。] DotNetOpenAuth.OpenId.HmacShaAssociation。 TryFindBestAssociation(第 162 行)希望这会有所帮助,因为我不知所措。
    • 根据github.com/DotNetOpenAuth/DotNetOpenAuth/issues/47,“仍然需要转换 HMACSHA 算法”。这已经完成,并且与 machine.config 条目(在我的帖子/答案中提到)一起,我现在可以正常工作了。
    【解决方案2】:

    使用 Andrew 的评论/链接,我能够让解决方案发挥作用。但是,我从未能够使用 .NET Framework 3.5 克服 FIPS 问题。我必须升级到 .NET Framework 4.0,然后将以下内容添加到 ma​​chine.config XML 文件的根配置元素中:

    <mscorlib>
       <cryptographySettings>
          <cryptoNameMapping>
             <cryptoClasses>
                <cryptoClass CoreSHA512="System.Security.Cryptography.SHA512Cng, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <cryptoClass CoreSHA384="System.Security.Cryptography.SHA384Cng, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                <cryptoClass CoreSHA256="System.Security.Cryptography.SHA256Cng, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
             </cryptoClasses>
             <nameEntry name="System.Security.Cryptography.SHA512" class="CoreSHA512"/>
             <nameEntry name="System.Security.Cryptography.SHA384" class="CoreSHA384"/>
             <nameEntry name="System.Security.Cryptography.SHA256" class="CoreSHA256"/>
          </cryptoNameMapping>
       </cryptographySettings>
    </mscorlib>
    

    如果 XML 在上面被删除,请点击 Andrew 提供的链接,您会在 joeudwin 的帖子中找到 XML。我删除了“TestHMACSHA512”的行,并为 384 和 256 个条目复制了“TestSHA512”的行。我确实不需要需要从 CodePlex 下载 Security.Cryptography.dll。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多