zoukankan      html  css  js  c++  java
  • 解决md5不是windows平台FIPS验证的加密算法的一部分的怪异问题

    一. 发生问题

          临近下班时间的下午,领导一句话:项目先上到测试服吧,我明早来看看。

          我想项目还没做完,先上到测试服务器,简单看下应该是没什么问题,部署也只是一会儿的事嘛,随后把手头的项目编译,发布,拷到远程服务器上,IIS配置一下,各类服务装一下,在浏览器中输入地址,成功进入登录界面,输入正确的帐号密码,却发现登录不了,what,什么鬼?

          

    二. 查找原因

          因为项目在本地是正常的,于是找到日志,发现了问题所在

           

          原因是用户的登录密码加密方式用的是md5,而md5并不是FIPS(Federal Information Processing Standards 即(美国)联邦信息处理标准)中的一个部分  

     三. 尝试解决问题   

          于是打开某度,输入上面的错误,满屏的全匹配红色关键字扑面而来,看来有这问题的人还真多,瞬间觉得有救了

          主要原因就是系统的组策略安全设置开启了FIPS导致无法使用MD5算法,秉着志在必得的心情,按照网友们的解决办法去弄了一遍,不外乎就两种方式:

           第一种:到系统的组策略安全设置中把FIPS禁用掉

                        步骤:

                       1.按 WIN+R(或点击开始-运行),并输入gpedit.msc后确定,启动组策略编辑器。

                       2.左侧列表中找到 计算机配置 - Windows设置 - 安全设置 - 本地策略 - 安全选项,并在右侧找到“系统加密:将FIPS兼容算法用于加密、哈希和签名”,设置为禁用

                       

           第二种:修改注册表

                    步骤:

                    1.按WIN+R(或点击开始-运行),并输入 后确定,启动注册表编辑器。

                    2.浏览到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaFipsAlgorithmPolicy,将Enabled的值改为0

                     

      

           经过上面两种方法尝试后发现居然还是不行!!!,众多教程几乎全都是这两种解决办法,为什么我不行!!

           思考片刻,我想国内找不到,国外总有吧,这时候打开了某歌,输入错误信息。。。等等,外国人是用英文的,于是先去找到了错误信息对应的英文翻译(This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms),搜索,又是一片,呵呵

           在浏览多个页面的过程中,不经意间就进到巨硬msdn的一个页面,终于又发现了两个解决方法:

           1. 升级系统补丁,或者找到一个名叫KB935434的补丁(这个补丁根本已经找不到了好么)

           2. 在webconfig加入一段配置,可以绕过FIPS的验证  (一点用没有。。。)

           参考页面:https://blogs.msdn.microsoft.com/dataaccesstechnologies/2015/07/16/report-manager-system-invalidoperationexception-this-implementation-is-not-part-of-the-windows-platform-fips-validated-cryptographic-algorithms/

    四. 解决问题

           经过上面所有的尝试,包括重启,反复尝试,寻找方案,各种技术群询问,已经过去了3个多小时,我已经有点崩溃

           突然想到上面说的系统补丁,我想会不会是系统的原因,服务器的系统是win server 2008 r2 sp1 ,我去翻看了我本机电脑的注册表,发现是有不同的,我甚至还把本机注册表里有的项,而服务器里没有的,全给它建上去了,还是不行! 

          会不会是系统不同,读取的目录是不同的,或者说这个FIPS开关是会有多个的??

          于是我尝试着在注册表里全局搜索FipsAlgorithmPolicy这个关键字,一项一项的查找,最后定位到了一个仅有一层父级目录不同,但是其他目录结构,名字一模一样的项

           

          把里面的项改成0,马上去登录帐号,通过了!!!

          果然系统不同,读取的注册表目录是会有差别的。。。

    五. 总结

          有时候项目在本机是没问题的,但是发布到服务器上后总会出现一些奇怪的问题,这是经常发生的事情,大家都懂的。但是发生了问题,肯定是需要去解决的,首先,代码里做好基本的错误日志记录肯定是需要的,再找到解决方案,发现不可用之后,需要冷静下来,思考为什么会发生这样的问题,然后可以根据现有的解决办法延伸出去,多方位去判断原因,并尝试去动手,花时间不重要,重要的是累积经验,以后就可以少踩一些坑了。

    作者:Harry
  • 相关阅读:
    解决junit @RunWith无法使用的问题
    git .gitignore 有时不起作用的问题
    Docker常用命令 InsaneLoafer
    NOI2021 退役记
    2021“MINIEYE杯”中国大学生算法设计超级联赛 第二场 题解
    2021“MINIEYE杯”中国大学生算法设计超级联赛 第一场 题解
    数位DP
    Windows下Jmeter安装配置
    Linux安装docker-compose
    Ubuntu卸载MySQL
  • 原文地址:https://www.cnblogs.com/simendancer/p/6748061.html
Copyright © 2011-2022 走看看