1

我目前正在使用DotNetOpenAuth v4.1.0.12182来执行简单的依赖方功能,并且能够在不添加任何 web.config 条目的情况下使其正常工作(经过 Google 和 Yahoo 测试)。但是,此站点将部署到启用了以下设置的 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。SHA512托管..ctor() +4479214

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

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

故障排除步骤...

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

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

[ TargetInvocationException : 调用目标抛出异常。] 尝试执行 System.Security.Cryptography 时。SHA3 ​​84 .Create +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 登录按钮。这次我终于被重定向到 Yahoo,登录,并被发送回我的 localhost URL,但收到了这个 FIPS 错误:

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

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

  1. 添加在 HMACSHA512 machine.config 行中,我最初取出并复制了 HMACSHA256
  2. 根据此MSDN 博客,从 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解决这个问题的任何想法?

4

2 回答 2

0

使用安德鲁的评论/链接,我能够使解决方案正常工作。但是,我从未能够使用 .NET Framework 3.5 克服 FIPS 问题。我必须升级到 .NET Framework 4.0,然后将以下内容添加到machine.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。

于 2013-08-26T17:50:44.407 回答
0

您需要配置 .NET 本身以创建所需算法的 FIPS 兼容版本。请查看此先前提交并已修复的问题,包括评论,以获取有关如何进行的指导。

于 2012-07-06T14:40:07.610 回答