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