Microsoft 安全公告:最小证书密钥长度更新

基于公钥加密算法的强度由其使用暴力方法导出私钥所需的时间决定。当使用处理计算能力来导出私钥所需的时间足够多时,该算法被认为足够强大。威胁形势不断发展。因此,Microsoft 要进一步强化针对密钥长度少于 1024 位的 RSA 算法的标准。

应用该更新后,只有使用 CertGetCertificateChain

功能建立的证书链会受到影响。CryptoAPI 建立一个证书信任链,并使用时间有效性、证书吊销和证书政策(如预期目的)验证该链。该更新会进行其他检查,以确保该链中没有证书具有长度少于 1024 位的 RSA 密钥。

此安全更新的已知问题

应用此更新后:
  • 需要重新启动。
  • 证书颁发机构 (CA) 无法颁发密钥长度少于 1024 位的 RSA 证书。
  • 当 CA 使用密钥长度少于 1024 位的 RSA 证书时,CA 服务 (certsvc) 无法启动。
  • Internet Explorer 将不允许访问使用密钥长度少于 1024 位的 RSA 证书保护的网站。
  • 如果 Outlook 2010 使用密钥长度少于 1024 位的 RSA 证书,则无法用于加密电子邮件。不过,已经通过使用密钥长度少于 1024 位的 RSA​​ 证书加密的电子邮件可以在安装此更新后解密。
  • 如果 Outlook 2010 使用密钥长度少于 1024 位的 RSA 证书,则无法用于对电子邮件进行数字签名。
  • 在具有数字签名的 Outlook 2010 中接收电子邮件,或使用密钥长度少于 1024 位的 RSA 证书加密电子邮件时,用户会收到错误,提示该证书不受信任。用户仍然可以查看已加密或签名的电子邮件。
  • Outlook 2010 无法连接到使用对于 SSL/TLS 密钥长度少于 1024 位的 RSA 证书的 Microsoft Exchange 服务器。将显示以下错误:"Information you exchange with this site cannot be viewed or changed by others.However, there is a problem with the site's security certificate.The security certificate is not valid.The site should not be trusted."
  • 将报告安全警告“未知发布者”,但在以下情况下可以继续安装:
    • 遇到时间戳为 2010 年 1 月 1 日或更晚,以及通过使用密钥长度少于 1024 位的 RSA 证书的 Authenticode 签名。
    • 使用密钥长度少于 1024 位的 RSA 证书签名的签名安装程序。
    • 使用密钥长度少于 1024 位的 RSA 证书签名的 ActiveX 控件。在您安装此更新前安装的 Active X 控件不会受到影响。
  • 使用密钥长度为 512 位的 RSA 证书的 System Center HP-UX PA-RISC 计算机将产生检测信号警报,并且计算机的所有 Operations Manager 监控将会失败。同时,还会生成“SSL 证书错误”,带有“已签名的证书验证”说明。另外,由于“已签名的证书验证”错误,Operations Manager 不会发现新 HP-UX PA-RISC 计算机。我们鼓励拥有 HP-UX PA-RISC 计算机的 System Center 客户重新颁发密钥长度至少为 1024 位的 RSA 证书。有关详细信息,请访问以下 TechNet 网站:
    重要事项:在即将发行的 Windows 更新之后,由 Operations Manager 监控的 HP-UX PA-RISC 计算机将会出现检测信号和监控故障。
注意 EFS 加密不会受到此更新的影响。

搜索密钥长度少于 1024 位的 RSA 证书

如果正在使用密钥长度少于 1024 位的 RSA 证书,有四种主要方法搜索证书:
  • 手动检查证书和认证路径
  • 使用 CAPI2 日志记录
  • 检查证书模板
  • 在安装该更新的计算机上启用日志记录
手动检查证书和认证路径
您可以通过打开证书,查看其类型、密钥长度和认证路径进行手动检查。您可以通过查看(通常是双击)内部颁发的任何证书进行此操作。在“认证路径”选项卡上,单击链中每个证书的“查看证书”,以确保所有 RSA 证书使用的密钥长度至少为 1024 位。

例如,将下图中的证书从名为 AdatumRootCA 的企业根 CA 颁发到某个域控制器 (2003DC.adatum.com)。您可以在“认证路径”选项卡上选择 AdatumRootCA 证书。

收起这个图片 展开这个图片
 
“认证路径”选项卡


要查看 AdatumRootCA 证书,单击“查看证书”。在“详细信息”窗格中,选择“公钥”查看密钥大小,如下图所示。

收起这个图片 展开这个图片
 
查看证书


本示例中 AdatumRootCA 的 RSA 证书为 2048 位。
使用 CAPI2 日志记录
在运行 Windows Vista 或 Windows Server 2008 或 Windows 更高版本的计算机上,您可以使用 CAPI2 日志记录帮助识别长度少于 1024 位的密钥。然后,您可以让计算机执行其正常操作,稍后检查日志,以帮助识别长度少于 1024 位的密钥。然后,您可以使用这些信息跟踪证书来源,并进行必要的更新。

为此,您必须首先启用详细诊断日志记录。要启用详细模式日志记录,请执行以下步骤:

1. 打开注册表编辑器 (Regedit.exe)。

2. 找到以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\crypt32


3. 使用 0x00000005 值添加一个 DWORD(32 位)值 DiagLevel

4. 使用 0x00ffffff 值添加一个 QWORD(64 位)值 DiagMatchAnyMask

收起这个图片 展开这个图片
 
DiagMatchAnyMask


进行此操作后,您可以在事件查看器中启用 CAPI2 操作日志记录。CAPI2 操作日志位于事件查看器中的“应用程序和服务日志”、“Microsoft”、“Windows”和“CAPI2”下。要启用日志记录,右键单击“操作”日志,单击“启用日志”,然后单击“筛选当前日志”。单击“XML”选项卡,然后单击选中“手动编辑查询”复选框。
收起这个图片 展开这个图片
 
启用日志


收集日志之后,您可以使用以下筛选器减少要搜索的条目数,以查找密钥长度少于 1024 位的证书操作。以下筛选器将查找 512 位的密钥。

<QueryList>

< Query Id="0" Path="Microsoft-Windows-CAPI2/Operational">

< Select Path="Microsoft-Windows-CAPI2/Operational">Event[UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyLength='512']]]]] and UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyName='RSA']]]]]]</Select>

< /Query>

< /QueryList>

收起这个图片 展开这个图片
 
筛选当前日志


您还可以使用单个查询来查询多个密钥长度。例如,以下筛选器将查询 384 位的密钥和 512 位的密钥。

<QueryList>

< Query Id="0" Path="Microsoft-Windows-CAPI2/Operational">

< Select Path="Microsoft-Windows-CAPI2/Operational">Event[UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyLength='384']]]]] and UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyName='RSA']]]]]] or Event[UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyLength='512']]]]] and UserData[CertGetCertificateChain[CertificateChain[ChainElement[PublicKeyAlgorithm[@publicKeyName='RSA']]]]]]</Select>

< /Query>

< /QueryList>
检查证书模板
您可以在证书颁发机构 (CA) 上运行以下查询,以搜索使用长度少于 1024 位的密钥的证书模板:

certutil -dstemplate | findstr "[ msPKI-Minimal-Key-Size" | findstr /v "1024 2048 4096"

注意您应该在组织的每个林中运行此命令。

如果您运行此查询,使用少于 1024 位的密钥的模板将显示其密钥大小。下图显示了两个内置模板 SmartcardLogon 和 SmartcardUser,默认密钥长度的最小密钥大小为 512 位。您还可以搜索其他已复制的模板,最小密钥大小少于 1024 位。

对于您搜索的允许少于 1024 位密钥的每个模板,您应该决定是否可能颁发“证书颁发机构”控制台的“证书模板”部分中所显示的证书。

收起这个图片 展开这个图片
 
“证书模板”部分


在安装该更新的计算机上启用日志记录
您可以使用注册表设置,启用将此更新应用于查找密钥长度少于 1024 位的 RSA 证书的计算机。“解决方法”部分中描述了实施日志记录的选项,因为这与可允许密钥长度少于 1024 位的注册表设置是紧密结合的。有关如何启用日志记录的详细信息,请稍后参阅本文的“使用注册表设置允许密钥长度少于 1024 位”部分。

解决方法

有关阻止密钥长度少于 1024 位的证书的任何问题的主要解决方法,是实施一个更大的(1024 位密钥长度或更大)证书。我们建议用户实施密钥长度至少为 2048 位的证书。
通过证书自动注册增加已颁发证书的密钥大小
对于颁发密钥长度少于 1024 位的 RSA 证书的模板,您应该考虑将最小密钥大小的设置增加到至少 1024 位。假设这些证书颁发的设备支持较大的密钥大小。

增加最小密钥大小之后,使用“证书模板控制台”中的“重新注册所有证书持有者”选项使客户端计算机重新注册并请求更大的密钥大小。

收起这个图片 展开这个图片
 
智能卡登录


如果您已经通过使用内置的“智能卡登录”或“智能卡用户”模板颁发证书,将无法直接调整模板的最小密钥大小。相反,您必须要复制模板,增加复制的模板上的密钥大小,然后 使用复制的模板取代原始模板

收起这个图片 展开这个图片
 
更新智能卡登录属性


取代模板之后,使用“重新注册所有证书持有者”选项使客户端计算机重新注册并请求更大的密钥大小。

收起这个图片 展开这个图片
 
重新注册所有证书持有者


使用注册表设置允许密钥长度少于 1024 位
Microsoft 不建议客户使用长度少于 1024 位的证书。但是,在制定长期解决方案以取代密钥长度少于 1024 位的 RSA 证书的同时,客户可能需要一个临时解决方法。在这些情况下,Microsoft 将为客户提供更改此更新运行方式的能力。配置这些设置的客户接受以下风险,***者也许能够破坏他们的证书,并用来欺骗内容、执行钓鱼***或执行中间人***。

重要说明本部分(或称方法或任务)包含有关如何修改注册表的步骤。但是,注册表修改不当可能会出现严重问题。因此,请一定严格按照下列步骤操作。为了获得进一步保护,请在修改注册表之前对其进行备份。这样就可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中备份和还原注册表
在已应用此更新的基于 Windows 8 或 Windows Server 2012 的计算机中,以下注册表路径和设置可用于控制对密钥长度少于 1024 位的 RSA 证书的检测和阻止。

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\OID\EncodingType 0\CertDLLCreateCertificateChainEngine\Config

有四个主要值控制少于 1024 位阻止的密钥的运行方式。如下所示:
  • MinRsaPubKeyBitLength
  • EnableWeakSignatureFlags
  • WeakSignatureLogDir
  • WeakRsaPubKeyTime
下面的部分中讨论了这些值及其控制的内容。

对于启动 Windows Vista 和 Windows Server 2008 的操作系统,您可以使用 certutil 命令更改这些注册表设置。在 Windows XP、Windows Server 2003 和 Windows Server 2003 R2 上,您无法使用 certutil 命令更改这些注册表设置。不过,您可以使用注册表编辑器、reg 命令或 reg 文件。
MinRsaPubKeyBitLength
MinRsaPubKeyBitLength 是定义所允许的最小 RSA 密钥长度的 DWORD 值。默认情况下,此值不存在,所允许的最小 RSA 密钥长度为 1024。您可以运行以下命令使用 certutil 将此值设置为 512:

certutil -setreg chain\minRSAPubKeyBitLength 512

注意由于要更改注册表,本文中出现的所有 certutil 命令都需要本地管理员特权。您可以忽略“The CertSvc service may have to be restarted for changes to take effect”消息。这些命令不需要该操作,因为它们不影响证书服务 (CertSvc)。

通过删除此值,您可以还原为长度少于 1024 位的阻止密钥。为此,请运行以下 certutil 命令:

certutil -delreg chain\MinRsaPubKeyBitLength
EnableWeakSignatureFlags
EnableWeakSignatureFlags DWORD 值有三个可能的值:2、4、6 和 8。这些设置更改了少于 1024 位的密钥的检测和阻止运行方式的行为。下表中描述了这些设置:
收起该表格 展开该表格
 
十进制值说明
2启用时,允许根证书(链建立过程中)有密钥长度少于 1024 位的 RSA 证书。阻止链中下方的 RSA 证书(如果具有少于 1024 位的密钥)仍然有效。当此值被设为 CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG 时将启用该标记。
4启用日志记录,但仍然强制阻止密钥长度少于 1024 位的 RSA 证书。启用时需要 WeakSignatureLogDir。遇到的长度少于 1024 位的所有密钥将被复制到物理 WeakSignatureLogDir 文件夹中。当此值被设为 CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG 时将启用该标记。
6启用时,允许根证书有密钥长度少于 1024 位的 RSA 证书,并需要 WeakSignatureLogDir。根证书以下具有少于 1024 位的密钥的所有密钥将被阻止,并记录到指定的文件夹中,如 WeakSignatureLogDir。
8启用日志记录,不强制阻止长度少于 1024 位的密钥。启用时需要 WeakSignatureLogDir。遇到的长度少于 1024 位的所有密钥将被复制到物理 WeakSignatureLogDir 文件夹中。当此值被设为 CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG 时将启用该标记。

原出处:http://support.microsoft.com/kb/2661254