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