我目前正在使用DotNetOpenAuth v4.1.0.12182来执行简单的依赖方功能,并且能够在不添加任何 web.config 条目的情况下使其正常工作(经过 Google 和 Yahoo 测试)。但是,此站点将部署到启用了以下设置的 Web 服务器上:
- 转到控制面板 > 管理工具 > 本地安全策略
- 找到设置“系统加密:使用符合 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 日)
我提供了我重新采取的步骤,以便可以复制错误:
- 我使用了相当全新的 Server 2008 R2 Enterprise 安装(已经安装了 VS 2010,也许还有一些更新)
- 添加了 Web 服务器角色
- 添加了 .NET Framework 3.5.1 功能
- 启用本地安全策略:系统加密:使用符合 FIPS 的算法进行加密、散列和签名
- 重新启动了服务器
- 编译/构建 OpenIdRelyingPartyWebForms 示例并将其发布以用作本地 IIS 网站
- 遇到一个 URI 错误,导致我必须将应用程序池设置为使用 ASP.NET v4.0
- 遇到另一个错误,导致我不得不“强制安装 .NET 4”:http ://devonenote.com/2010/06/could-not-load-type-system-servicemodel-activation-httpmodule/
- 现在“依赖方”网页终于呈现了,所以我点击了仅限会员链接,然后点击了使用 Yahoo ID 登录选项
- 经过大约 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)
故障排除步骤...
- 将配置条目(基于 Andrew 提供的链接)添加到标签下的 Framework64/v4.0.30319/Config/machine.config 中。但是,由于我还没有在任何地方添加 Security.Cryptogrophy DLL,所以我从配置中删除了这些行(那些处理 HMACSHA512 的行)。
- 重新启动了机器
- 浏览并单击使用 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
所以现在我继续进行以下操作:
- 添加在 HMACSHA512 machine.config 行中,我最初取出并复制了 HMACSHA256
- 根据此MSDN 博客,从 Andrew 对 GAC (windows\assembly) 的响应中引用的 codeplex 项目添加了 Security.Cryptography.dll 文件
- 重新启动了机器
- 再次浏览并单击 Yahoo 按钮,但收到相同的错误
看起来好像新的 Cryptography DLL 没有被 ASP.NET “拾取”并使用。所以,接下来我尝试了:
- 从 GAC 中删除 DLL
- 重新启动机器
- 添加 Cryptography DLL 作为对 OpenIdRelyingPartyWebForms 示例的引用并重新编译并发布它,覆盖现有的 IIS 网站文件
- 再次浏览并单击 Yahoo 按钮,但收到相同的错误