我们的应用程序的一些部分正在使用AJAX.NET 5.7.25.1。我们的服务器管理员已启用FIPS,我们遇到以下错误:
此实现不是Windows平台FIPS验证的加密算法的一部分。
调用堆栈:
at System.Security.Cryptography.MD5CryptoServiceProvider..ctor()
at MS.Utilities.MD5Helper.GetHash(Byte[] data)
at Ajax.AjaxRequestProcessor.Run()
at Ajax.AjaxHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
新版本的AJAX.NET库是否符合FIPS标准?
答案 0 :(得分:1)
在.NET中使用任何MD5哈希算法都被认为是非符合FIPS的,因此这将始终给出该错误。我不确定AjaxRequestProcessor是否可以使用MD5,它可能是某种viewstate操作。更改viewstate加密算法以使用3DES而不是MD5可能会有所帮助。
尝试在web.config文件的system.web部分添加此密钥:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
有关解决方法的完整文章HERE。
另外,只是在webconfig中使用debug =“true”会导致出现此错误,因为.NET使用MD5进行某些调试操作。你的web.config中是debug =“false”吗?
<system.web>
<compilation debug="false">
</system.web>
答案 1 :(得分:1)
这里最快的方法可能是直接修改AJAX.Net专业版来删除使用MD5算法的违规通话。去获取您从Codeplex使用的AJax.NET专业版的源代码。在AjaxPro / Utilities / MD5Helper.cs中:
替换线......
MD5 md5 = new MD5CryptoServiceProvider();
用线......
SHA1 md5 = new SHA1CryptoServiceProvider();
那应该解决它。 SHA1 is FIPS compliant per this page
在这种情况下......正在使用的唯一API是ComputeHash()方法,两个提供程序都是这样实现的......
只需切换加密提供程序,您就可以编译并使用代码而无需任何其他更改,也不会出现任何烦人的FIPS策略违规标记。