论文部分内容阅读
摘要:自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硬件加密卡方式加密的网站来说,需要更长的时间周期来替换,而业务往往又不能中断。所以采用本文介绍的通过注册表修改方法较好地解决了这个实际问题,有着很大的实际意义。
陈慧蕊 工商银行杭州软件开发中心
陈连春 建设银行台州分行电子银行部
关键字: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硬件加密卡方式加密的网站来说,需要更长的时间周期来替换,而业务往往又不能中断。所以采用本文介绍的通过注册表修改方法较好地解决了这个实际问题,有着很大的实际意义。
陈慧蕊 工商银行杭州软件开发中心
陈连春 建设银行台州分行电子银行部