陳慧蕊 陳連春



摘要:自Microsoft 在2012年8月14日發布的“最小密鑰長度更新(2661254)”安全通報和2013年11月12日發布“重要數字簽名中的漏洞可能允許拒絕服務 (MS13-095 ,更新2868626)”的安全公告有關內容,WindowsXPSP3和Windows7從非安全更新 (2661254)開始阻止使用長度少于 1024 位的弱RSA密鑰的功能,Windows 8或 Windows Server 2012 已經包含了阻止使用長度少于 1024 位的弱 RSA 密鑰的功能。但是1024位以下密鑰作為過渡階段的HTTPS服務器有一定的存在數量,特別是采用SSL硬件加密卡方式加密的網站來說,需要更長的時間周期來替換,而業務往往又不能中斷,結合實際工作中碰到的問題,通過仔細研究,提出了比較完整的、詳細的解決方案。
關鍵字:HTTPS服務器;密鑰長度;Windows更新;注冊表
問題提出:
根據Microsoft 在2012年8月14日發布的“最小密鑰長度更新(2661254)”安全通報和2013年11月12日發布“重要數字簽名中的漏洞可能允許拒絕服務 (MS13-095 ,更新2868626)”的安全公告有關內容,WindowsXPSP3和Windows7從非安全更新 (2661254)開始阻止使用長度少于 1024 位的弱RSA密鑰的功能,非安全更新2868626是2661254的替代;而Windows 8或 Windows Server 2012 已經包含了阻止使用長度少于 1024 位的弱 RSA 密鑰的功能。其結果是在安裝了以上更新包的WindowsXPSP3(以上更新包不適合WindowsXPSP2)和Windows7系統和所有的Windows8系統的Internet Explorer(以下簡稱IE)瀏覽器將不允許訪問使用密鑰長度少于 1024 位的 RSA 證書保護的網站。WindowsXPSP3系統使用IE8.0瀏覽器瀏覽該類網站時,出現如圖1所示的提示,無法顯示網頁。Windows7和Windows8下使用IE瀏覽器出現類似錯誤。在實際工作中會給我們帶來諸多不便,特別是大型企業用戶訪問內部網站時會更多碰到此類問題。
解決方法:
要解決上述問題最好的辦法是服務器端及時更新證書,按照上述Microsoft安全通告的建議將證書密鑰長度更新到1024位以上,建議是2048位。但是,在服務器端無法及時取代密鑰長度少于 1024 位的 RSA 證書而業務又無法中斷的情況下,客戶端可以采用以下方法解決這個。
方法1:安裝第三方瀏覽器
經過測試,Chrome(谷歌)瀏覽器(測試了另外幾個都不行)可以瀏覽此類網站,IE8.0和Chrome44.0的結果對比如圖2所示,在Chrome中可以選擇“繼續前往XX(不安全)”繼續顯示網頁。
方法2:刪除已安裝的更新
通過“控制面板”-“添加/刪除程序”中的“顯示更新”選項,找到相應的安全更新包,刪除掉,即可。通過深入研究,現在已經知道影響這個證書長度的更新包有2661254、2808679和2868626三個更新,如果發現系統里有多個要逐個刪除。
這個方法實際工作中存在不足:一方面這方法只能適用WindowsXP和Windows7這兩個通過更新包升級的系統,而對于Windows8和Windows Server 2012已經包含在系統里了,就無能為力;另一方面有些系統無法通過上述的“添加/刪除程序”功能刪除,更有些會出現刪除后更新包里面顯示已經沒有了,但實際沒有刪除成功,本人在用虛擬機實驗過程中就曾出現過這樣的情況,結果用刪除WindowsXP的SP3補丁包回退到SP2,然后重新安裝SP3升級包的方法才解決。
方法3:使用注冊表設置允許密鑰長度少于 1024 位
此方法是最有效也是最徹底的解決方法。
根據Microsoft安全公告中的說明,用于控制對密鑰長度少于 1024 位的 RSA 證書的檢測和阻止的注冊表路徑是HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config,其控制值有MinRsaPubKeyBitLength、EnableWeakSignatureFlags、WeakSignatureLogDir、WeakRsaPubKeyTime四個。有以下兩個方法通過設置一個或幾個參數組合來實現用IE瀏覽器訪問證書密鑰長度少于 1024 位的網站。
方法1:設置MinRsaPubKeyBitLength為需要的值
MinRsaPubKeyBitLength是定義所允許的最小 RSA 密鑰長度的 DWORD值。默認情況下,此值不存在,所允許的最小 RSA 密鑰長度為 1024。根據有關說明和實際測試,客戶端通過定義MinRsaPubKeyBitLength這個參數來實現獲得對密鑰長度少于 1024 位的 RSA證書的訪問許可權限,從而實現用IE瀏覽器訪問該類證書的密鑰長度少于 1024 位的網站。
具體命令:
1、對于Windows XP、Windows Server 2003 和 Windows Server 2003 R2系統來說,可以使用注冊表編輯器、reg 命令或 reg 文件來創建“HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config\MinRsaPubKeyBitLength”并賦于需要的值,如要將系統設置成允許訪問證書密鑰長度512位以上(包括512位)的所有網站,那就將此值設為512(十進制)。命令如下:
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config" /v MinRsaPubKeyBitLength /t REG_DWORD /d 512 /f。
運行結果如下,這時候的標題是“證書錯誤,導航已阻止”,頁面上是“此網站的安全證書有問題”,可以選擇“繼續瀏覽此網站(不推薦)”正常訪問該網站 :
2、對于Windows7、Windows8等用戶既可以使用注冊表編輯器、reg 命令或 reg 文件來創建“HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config\MinRsaPubKeyBitLength”并賦于需要的值,也可以使用 certutil 命令更改這些注冊表設置(以管理員身份運行),如要將系統設置成允許訪問證書密鑰長度512位以上(包括512位)的所有網站,那就將此值設為512(十進制)。命令如下:
certutil -setreg chain\minRSAPubKeyBitLength 512
經過這樣設置,在Windows7和Windows8下就也可以通過IE瀏覽器訪問上述密鑰長度少于1024位的網站。
方法2:設置EnableWeakSignatureFlags的值為8
EnableWeakSignatureFlags DWORD 值有三個可能的值:2、4、6 和 8。其中8是啟用日志記錄,不強制阻止長度少于 1024 位的密鑰。這時如果設定了 WeakSignatureLogDir,那么當遇到長度少于 1024 位密鑰時將被復制到物理 WeakSignatureLogDir 文件夾(如該文件夾不存在要先創建之)中。
設置方法同上,注冊表命令:
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config" /v EnableWeakSignatureFlags /t REG_DWORD /d 8 /f。
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config" /v WeakSignatureLogDir /t REG_SZ /d "c:\Under1024KeyLog" /f。
Windows7、Windows8下的certutil命令如下:
certutil -setreg chain\EnableWeakSignatureFlags 8
certutil -setreg chain\WeakSignatureLogDir "c:\Under1024KeyLog"
總結:
RSA 是 HTTPS 體系中最重要的算法,而且被證明RSA密鑰要求在2048位以上才是安全的,但是1024位以下密鑰作為過渡階段的HTTPS服務器有一定的存在數量,特別是采用SSL硬件加密卡方式加密的網站來說,需要更長的時間周期來替換,而業務往往又不能中斷。所以采用本文介紹的通過注冊表修改方法較好地解決了這個實際問題,有著很大的實際意義。
陳慧蕊 工商銀行杭州軟件開發中心
陳連春 建設銀行臺州分行電子銀行部