一. 發生問題
臨近下班時間的下午,領導一句話:項目先上到測試服吧,我明早來看看。
我想項目還沒做完,先上到測試服務器,簡單看下應該是沒什么問題,部署也只是一會兒的事嘛,隨后把手頭的項目編譯,發布,拷到遠程服務器上,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_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy
,將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,馬上去登錄帳號,通過了!!!
果然系統不同,讀取的注冊表目錄是會有差別的。。。
五. 總結
有時候項目在本機是沒問題的,但是發布到服務器上后總會出現一些奇怪的問題,這是經常發生的事情,大家都懂的。但是發生了問題,肯定是需要去解決的,首先,代碼里做好基本的錯誤日志記錄肯定是需要的,再找到解決方案,發現不可用之后,需要冷靜下來,思考為什么會發生這樣的問題,然后可以根據現有的解決辦法延伸出去,多方位去判斷原因,並嘗試去動手,花時間不重要,重要的是累積經驗,以后就可以少踩一些坑了。