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