DotNetOpenAuth和FIPS服务器错误

时间:2012-07-05 23:06:38

标签: dotnetopenauth

我目前正在使用 DotNetOpenAuth v4.1.0.12182 来执行简单的依赖方功能,并且无需添加任何功能即可使其正常运行(经过测试的Google和Yahoo) web.config条目。但是,此站点将部署到启用了以下设置的Web服务器上:

  1. 转到“控制面板”>管理工具>本地安全政策
  2. 查找设置"系统加密:使用符合FIPS标准的算法......"并将其设置为已启用
  3. 如果没有启用此功能,网站可以正常运行。启用此功能后,我收到服务器错误"此实现不是Windows平台FIPS验证的加密算法的一部分"。我确实在dotnetopenauth v4-0 beta版本页面上找到了相关信息,其中提到,截至DotNetOpenAuth 4.0版本,其中一项更改是"现在可以在.config文件中配置符合FIPS标准的SHA算法。&# 34;

    我需要帮助...

    我想知道我需要做什么配置更改才能让这个FIPS消息/错误消失。我已经查看了[http://www.dotnetopenauth.net/developers/help/configuration-options/] [2],但对于与FIPS相关的内容,我找不到任何明确的信息。非常感谢任何帮助,谢谢!

    更新(7/10/2012)

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

    1. 我使用了相当全新的Server 2008 R2 Enterprise安装(已经安装了VS 2010,可能还有一些更新)
    2. 添加了Web服务器角色
    3. 添加了.NET Framework 3.5.1功能
    4. 启用本地安全策略:系统加密:使用符合FIPS标准的算法进行加密,散列和签名
    5. 重新启动服务器
    6. 编译/构建OpenIdRelyingPartyWebForms示例并将其发布以用作本地IIS网站
    7. 导致我错误导致我必须将App Pool设置为使用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秒的暂停处理后,我收到:
    11.   

      [ InvalidOperationException :此实现不是Windows平台FIPS验证的加密算法的一部分。]

        System.Security.Cryptography。 SHA512 Managed..ctor()+4479214

           

      [ TargetInvocationException :调用目标时抛出异常。]尝试执行System.Security.Cryptography。 SHA512 .Create +11然后系统.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按钮登录
      4.   

        [ InvalidOperationException :此实现不是Windows平台FIPS验证的加密算法的一部分。]

          System.Security.Cryptography。 SHA384 Managed..ctor()+ 4486510

             

        [ TargetInvocationException :调用目标时抛出异常。]尝试执行System.Security.Cryptography。 SHA384 .Create +11然后系统.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(字节[]键)+4491026

        所以现在我继续以下内容:

        1. 在我最初取出的HMACSHA512 machine.config行中添加并复制了HMACSHA256
        2. 根据此MSDN blog
        3. ,在Andrew对GAC(windows \ assembly)的响应中引用的codeplex项目中添加了Security.Cryptography.dll文件
        4. 重新启动机器
        5. 浏览并再次单击Yahoo按钮但收到相同的错误
        6. 好像新的加密DLL没有被拾取"通过ASP.NET和使用。所以,接下来我试过了:

          1. 从GAC中删除DLL
          2. 重新启动机器
          3. 添加了Cryptography DLL作为对OpenIdRelyingPartyWebForms示例的引用,并重新编译并发布它,覆盖了现有的IIS网站文件
          4. 浏览并再次单击Yahoo按钮但收到相同的错误
          5. 关于如何通过 HMACSHA256 解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用Andrew的评论/链接,我能够使解决方案正常运行。但是,我无法使用.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。