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

Support for Windows XP has ended

Microsoft ended support for Windows XP on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

Support for Windows Server 2003 ended on July 14, 2015

Microsoft ended support for Windows Server 2003 on July 14, 2015. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

简介
Microsoft 已为 IT 专业人员发布了 Microsoft 安全公告。此公告宣布将阻止对密钥长度少于 1024 位的 RSA 证书的使用。若要查看此安全公告,请访问以下 Microsoft 网站:为减少未经授权曝光敏感信息的风险,Microsoft 已为所有受支持的 Microsoft Windows 版本发布了非安全更新 (KB 2661254)。此更新会阻止长度少于 1024 位的加密密钥。此更新不适用于 Windows 8 Release Preview 或 Windows Server 2012 候选发布,因为这些操作系统包含了阻止使用长度少于 1024 位的弱 RSA 密钥的功能。
更多信息
基于公钥加密算法的强度由其使用暴力方法导出私钥所需的时间决定。当使用处理计算能力来导出私钥所需的时间足够多时,该算法被认为足够强大。威胁形势不断发展。因此,Microsoft 要进一步强化针对密钥长度少于 1024 位的 RSA 算法的标准。

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

更新替换信息

此更新将替换以下更新:
2677070 吊销证书的自动更新程序可用于 Windows Vista、Windows Server 2008、Windows 7 和 Windows Server 2008 R2

此安全更新的已知问题

应用此更新后:
  • 需要重新启动。
  • 证书颁发机构 (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 网站:
注意 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



进行此操作后,您可以在事件查看器中启用 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 时将启用该标记。

示例

要启用密钥长度少于 1024 位的 RSA 根证书,请使用以下 certutil 命令:

certutil -setreg chain\EnableWeakSignatureFlags 2

要在阻止使用密钥长度少于 1024 位的证书的同时启用日志记录,请使用以下 certutil 命令:

certutil -setreg chain\EnableWeakSignatureFlags 4

要仅启用密钥长度少于 1024 位的根证书下的 RSA 证书的日志记录,请使用以下 certutil 命令:

certutil -setreg chain\EnableWeakSignatureFlags 6

要仅启用日志记录而不阻止长度少于 1024 的密钥,请使用以下 certutil 命令:

certutil -setreg chain\EnableWeakSignatureFlags 8

注意启用日志记录(十进制设置 4、6 或 8)时,您还必须配置日志目录,如下一部分中所述。

WeakSignatureLogDir

定义时,密钥长度少于 1024 位的证书将被写入指定的文件夹。例如,C:\Under1024KeyLog 可能为此值的数据。当 EnableWeakSignatureFlags 被设为 4 或 8 时需要此选项。确保您在指定的文件夹配置安全,这样,已通过身份验证的用户和本地组所有应用程序包都具有修改权限。要为 C:\Under1024KeyLog 设置此值,您可以使用以下 certutil 命令:

Certutil -setreg chain\WeakSignatureLogDir "c:\Under1024KeyLog"

您还可以配置 WeakSignatureLogDir,将其写入网络共享文件夹中。请确保您已为网络位置配置了相应的权限,这样所有已配置的用户都可以写入共享文件夹。以下命令是配置 WeakSignatureLogDir 将其写入名为 Keys 的文件夹的示例,该文件夹在 Server1 上是名为 RSA 的网络共享文件夹:

Certutil -setreg chain\WeakSignatureLogDir "\\server1\rsa\keys"

WeakRsaPubKeyTime

WeakRsaPubKeyTime 是一个 8 字节 REG_BINARY 值,包含 Windows FILETIME 数据类型,存储为 UTC/GMT。通过阻止对于 Authenticode 签名长度少于 1024 位的密钥,此值主要可用于减少潜在的问题。用于在配置日期和时间之前对代码签名的证书,不检查是否有长度少于 1024 位的密钥。默认情况下此注册表值不存在,在午夜 UTC/GMT 时被视为 2010 年 1 月 1 日清晨。

注意此设置仅在证书用于 Authenticode 签署时间戳文件时适用。如果此代码未印有时间戳,则使用当前时间,而不使用 WeakRsaPubKeyTime 设置。

WeakRsaPubKeyTime 设置允许该日期的配置,以便考虑旧的签名是否有效。如果您有理由为 WeakRsaPubKeyTime 设置不同的日期和时间,将能够使用 certutil 设置其他日期。例如,如果您想将日期设为 2010 年 8 月 29 日,可以使用以下命令:

certutil -setreg chain\WeakRsaPubKeyTime @08/29/2010

如果您必须设置一个特定时间(如 2011 年 7 月 4 日下午 6:00),则以 +[dd:hh] 格式在命令中增加天数和小时数。由于下午 6:00 在 2011 年 7 月 4 日午夜之后的 18 个小时,您可以运行以下命令:

certutil -setreg chain\WeakRsaPubKeyTime @01/15/2011+00:18

在 Internet Information Services (IIS) 上配置证书

如果您是一名必须发布 1024 位或更长新证书的 IIS 客户,请参阅以下文章:
解决方案
可以从 Microsoft 下载中心下载以下文件:


对于所有受支持的基于 x86 的 Windows XP 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows XP Professional x64 版本

下载立即下载此程序包。

对于所有受支持的基于 x86 的 Windows Server 2003 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows Server 2003 版本

下载立即下载此程序包。

对于所有受支持的基于 IA-64 的 Windows Server 2003 版本

下载立即下载此程序包。

对于所有受支持的基于 x86 的 Windows Vista 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows Vista 版本

下载立即下载此程序包。

对于所有受支持的基于 x86 的 Windows Server 2008 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows Server 2008 版本

下载立即下载此程序包。

对于所有受支持的基于 IA-64 的 Windows Server 2008 版本

下载立即下载此程序包。

对于所有受支持的基于 x86 的 Windows 7 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows 7 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows Server 2008 R2 版本

下载立即下载此程序包。

对于所有受支持的基于 IA-64 的 Windows Server 2008 R2 版本

下载立即下载此程序包。

对于所有受支持的基于 x86 的 Windows Embedded Standard 7 版本

下载立即下载此程序包。

对于所有受支持的基于 x64 的 Windows Embedded Standard 7 版本

下载立即下载此程序包。

发布日期:2012 年 8 月 14 日

有关如何下载 Microsoft 支持文件的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591 如何从联机服务获得 Microsoft 支持文件
Microsoft 已对该文件进行了病毒扫描。Microsoft 使用的是该文件发布时可以获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器上,以防止在未经授权的情况下对其进行更改。
文件信息
若要获取这些服务包内提供的文件列表,请单击以下链接:
update security_patch security_update security bug flaw vulnerability malicious attacker exploit registry unauthenticated buffer overrun overflow specially-formed scope specially-crafted denial of service DoS TSE
属性

文章 ID:2661254 - 上次审阅时间:12/26/2012 23:40:00 - 修订版本: 6.0

Windows 7 Service Pack 1, Windows 7 Enterprise, Windows 7 Professional, Windows 7 Ultimate, Windows 7 Home Premium, Windows 7 Home Basic, Windows Server 2008 R2 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Service Pack 2, Windows Server 2008 for Itanium-Based Systems, Windows Server 2008 Datacenter, Windows Server 2008 Enterprise, Windows Server 2008 Standard, Windows Web Server 2008, Windows Vista Service Pack 2, Windows Vista Service Pack 1, Microsoft Windows Server 2003 Service Pack 2, Microsoft Windows XP Service Pack 3

  • kbsecadvisory atdownload kbbug kbexpertiseinter kbfix kbsecurity kbsecvulnerability KB2661254
反馈