如何限制使用特定的加密算法和 Schannel.dll 中的协议

适用于: Microsoft Windows Server 2003 Enterprise Edition (32-bit x86)Microsoft Windows Server 2003 Standard Edition (32-bit x86)Microsoft Windows Server 2003 Web Edition

概要


本文介绍如何限制使用特定的加密算法和 Schannel.dll 文件中的协议。此信息还适用于独立软件供应商 (ISV) 编写的应用程序的 Microsoft 加密 API (CAPI)。

注意:本文适用于 Windows Server 2003 和 Windows 的早期版本。适用于 Windows Server 2008 和更高版本的 Windows 的注册表项,请参阅TLS 的注册表设置

详细信息


FIPS 140-1 加密验证应附带 Windows NT 4.0 服务包 6 以下加密服务提供程序 (Csp) 已获得证书:

  • Microsoft 基础加密提供程序 (Rsabase.dll)
  • Microsoft 增强的加密提供程序 (Rsaenh.dll) (非导出版本)
Microsoft TLS/SSL 安全提供程序,Schannel.dll 文件中,使用此处列出其支持 Internet Explorer 和 Internet Information Services (IIS) 中通过 SSL 或 TLS 进行安全通信的 Csp。

您可以更改要支持的密码套件 1 和 2 的 Schannel.dll 文件。但是,该程序还必须支持 1 和 2 的密码套件。IIS 4.0 和 5.0 中不支持的密码套件 1 和 2。

本文包含必要的信息来配置 TLS/SSL 安全提供程序的 Windows NT 4.0 服务包 6 或更高版本。可以使用 Windows 注册表来控制特定 SSL 3.0 或 TLS 1.0 密码套件,相对于基本的加密提供程序或增强的加密提供程序所支持的加密算法的使用。

注意:在 Windows NT 4.0 服务包 6,Schannel.dll 文件不使用 Microsoft 基础 DSS 加密提供程序 (Dssbase.dll) 或 Microsoft DS/Diffie-hellman 增强的加密提供程序 (Dssenh.dll)。

密码套件

SSL 3.0 (http://www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt) 和 TLS 1.0 (RFC2246) 与 INTERNET 草稿"Tls draft-ietf-tls-56-bit-ciphersuites-00.txt 56 位导出密码套件"提供选项,以使用不同的密码套件。每个密码套件确定密钥交换、 身份验证、 加密和 SSL/TLS 会话中使用的 MAC 算法。请注意,当您使用 RSA 密钥交换和身份验证算法,术语RSA出现在相应的密码套件定义中只有一次。

Windows NT 4.0 服务包 6 Microsoft TLS/SSL 安全提供程序支持以下 SSL 3.0 定义"弱",当您使用基本的加密提供程序或增强的加密提供程序:

SSL_RSA_EXPORT_WITH_RC4_40_MD5{ 0x00,0x03 }
SSL_RSA_WITH_RC4_128_MD5{ 0x00,0x04 }
SSL_RSA_WITH_RC4_128_SHA{ 0x00,0x05 }
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5{ 0x00,0x06 }
SSL_RSA_WITH_DES_CBC_SHA{ 0x00,0x09 }
SSL_RSA_WITH_3DES_EDE_CBC_SHA{ 0x00,0x0A }
SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA{ 0x00,0x62 }
SSL_RSA_EXPORT1024_WITH_RC4_56_SHA{ 0x00,0x64 }
注意:SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA 和 SSL_RSA_EXPORT1024_WITH_RC4_56_SHA 都不是在 SSL 3.0 文本中定义的。但是,几个 SSL 3.0 供应商支持它们。这包括 Microsoft。

Windows NT 4.0 服务包 6 Microsoft TLS/SSL 安全提供程序还支持以下 TLS 1.0 定义"弱",当您使用基本的加密提供程序或增强的加密提供程序:

TLS_RSA_EXPORT_WITH_RC4_40_MD5{ 0x00,0x03 }
TLS_RSA_WITH_RC4_128_MD5{ 0x00,0x04 }
TLS_RSA_WITH_RC4_128_SHA{ 0x00,0x05 }
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5{ 0x00,0x06 }
TLS_RSA_WITH_DES_CBC_SHA{ 0x00,0x09 }
TLS_RSA_WITH_3DES_EDE_CBC_SHA{ 0x00,0x0A }
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA{ 0x00,0x62 }
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA{ 0x00,0x64 }
注意:通过使用"0x00"的第一个字节定义密码套件为非私有和用于打开可互操作的通信。因此,Windows NT 4.0 服务包 6 Microsoft TLS/SSL 安全提供程序之后使用 SSL 3.0 和 TLS 1.0 中指定这些密码套件,以确保互操作性的过程。

Schannel 特定的注册表项

重要:此部分、 方法或任务包含一些介绍如何修改注册表的步骤。但是,如果不正确地修改了注册表,可能会出现严重的问题。因此,请确保仔细按照下列步骤操作。为增加保护,对其进行修改之前备份注册表。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何备份和还原在 Windows 注册表
注意:对分组密码键或哈希键的内容的任何更改会立即生效,而无需重新启动系统。

SCHANNEL 键

启动注册表编辑器 (Regedt32.exe),然后找到以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

SCHANNEL\Protocols 子键

若要使系统能够使用的协议,将不在默认情况下 (如 TLS 1.1 和 TLS 1.2) 协商,更改为0x0协议项下的以下注册表项中的DisabledByDefault值的 DWORD 值数据:

  • SCHANNEL\Protocols\TLS 1.1\Client
  • SCHANNEL\Protocols\TLS 1.1\Server
  • SCHANNEL\Protocols\TLS 1.2\Client
  • SCHANNEL\Protocols\TLS 1.2\Server
警告在协议项下的注册表项中的DisabledByDefault值不会优先于包含 Schannel 凭据数据的 SCHANNEL_CRED 结构中定义的grbitEnabledProtocols值。

SCHANNEL\Ciphers 子键

下 SCHANNEL 密钥的密码注册表项用于控制使用的对称算法 DES 和 RC4 等。以下是有效的注册表项,该项下的密码。
SCHANNEL\Ciphers\RC4 128/128 子项
RC4 128/128


此子项是指 128 位 RC4。


若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。或者,更改 DWORD 值数据为0x0。如果您不配置启用值,默认情况下启用。此注册表项不适用于没有 SGC 证书导出服务器。

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_WITH_RC4_128_MD5
  • SSL_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_WITH_RC4_128_SHA
SCHANNEL\Ciphers\Triple DES 168
三重 DES 168

此注册表项是指在 ANSI X9.52 和草稿 FIPS 46 3 中指定的 168 位三重 DES。此注册表项不适用于导出版本。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。或者,更改 dword 值数据为0x0。如果您不配置启用值,默认情况下启用。

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_WITH_3DES_EDE_CBC_SHA
  • SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
注意:对于之前 Windows Vista 版本的 Windows 的版本,需要三重 DES 168/168项。
SCHANNEL\Ciphers\RC2 128/128 子项
RC2 128/128

128 位 RC2 引用此注册表项。它不适用于导出版本。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

SCHANNEL\Ciphers\RC4 64/128 子项
RC4 64/128

64 位 RC4 引用此注册表项。它不适用于导出版本 (但在 Microsoft 资金使用)。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

SCHANNEL\Ciphers\RC4 56/128 子项
RC4 56/128

56 位 RC4 引用此注册表项。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

有效地禁用此算法中不允许以下功能:

  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
SCHANNEL\Ciphers\RC2 56/128 子项
RC2 56/128

56 位 RC2 引用此注册表项。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

SCHANNEL\Ciphers\RC2 56/56 子项

DES 56

此注册表项引用指定 FIPS 46 2 56 位 DES。FIPS 140-1 加密模块验证计划下验证它的 Rsabase.dll 和 Rsaenh.dll 文件中的实现。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA
SCHANNEL\Ciphers\RC4 40/128 子项

RC4 40/128

这指的是 40 位 RC4。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5
SCHANNEL\Ciphers\RC2 40/128 子项

RC2 40/128

40 位 RC2 引用此注册表项。

若要允许此密码算法,更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0。 如果您不配置启用值,默认情况下启用。

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SCHANNEL\Ciphers\NULL 子键

空值

此注册表项意味着没有加密。默认情况下,它已关闭。

若要关闭加密功能 (不允许所有的密码算法),更改为0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0

哈希 SCHANNEL/子项

SCHANNEL 项下的哈希注册表项用于控制如 sha-1 和 MD5 哈希算法的使用。以下是有效的注册表项,该项下的哈希值。

SCHANNEL\Hashes\MD5 子键

MD5

若要允许此哈希算法,更改为默认值0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • SSL_RSA_WITH_RC4_128_MD5
  • SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SCHANNEL\Hashes\SHA 子键

SHA

此注册表项将安全哈希算法 (sha-1),称为指定 FIPS 180-1 中。FIPS 140-1 加密模块验证计划下验证它的 Rsabase.dll 和 Rsaenh.dll 文件中的实现。

若要允许此哈希算法,更改为默认值0xffffffff将启用值的 DWORD 值数据。否则,更改 DWORD 值数据为0x0

有效地禁用此算法中不允许以下功能:

  • SSL_RSA_WITH_RC4_128_SHA
  • SSL_RSA_WITH_DES_CBC_SHA
  • SSL_RSA_WITH_3DES_EDE_CBC_SHA
  • SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • SSL_RSA_EXPORT1024_WITH_RC4_56_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

频道/KeyExchangeAlgorithms 子项

SCHANNEL 项下的 KeyExchangeAlgorithms 注册表项用于控制如 RSA 密钥交换算法的使用。以下是有效的注册表项,该项下的 KeyExchangeAlgorithms。

SCHANNEL\KeyExchangeAlgorithms\PKCS 子键
PKCS

此注册表项将 RSA 称为密钥交换和身份验证算法。

若要允许 RSA,更改为默认值0xffffffff将启用值的 DWORD 值数据。否则,将双字节数据更改为0x0

有效地禁用 RSA 禁止所有基于 RSA 的 SSL 和 TLS 密码套件由 Windows NT4 SP6 Microsoft TLS/SSL 安全提供支持。

FIPS 140-1 密码套件

您可以使用仅那些 SSL 3.0 或 TLS 1.0 密码套件,分别对应于 FIPS 46 3 或 FIPS 46 2 FIPS 180-1 算法由 Microsoft 的文章或增强的加密提供程序提供。

在本文中,我们称它们为 FIPS 140-1 的密码套件。具体而言,它们是,如下所示:

  • SSL_RSA_WITH_DES_CBC_SHA
  • SSL_RSA_WITH_3DES_EDE_CBC_SHA
  • SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA
若要使用仅 FIPS 140-1 密码套件此处定义并支持 Windows NT 4.0 服务包 6 Microsoft TLS/SSL 安全提供程序与基本加密提供程序或增强的加密提供程序,通过配置启用值的 DWORD 值数据为0x0的以下注册表项中:

  • SCHANNEL\Ciphers\RC4 128/128
  • SCHANNEL\Ciphers\RC2 128/128
  • SCHANNEL\Ciphers\RC4 64/128
  • SCHANNEL\Ciphers\RC4 56/128
  • SCHANNEL\Ciphers\RC2 56/128
  • SCHANNEL\Ciphers\RC4 40/128
  • SCHANNEL\Ciphers\RC2 40/128
  • SCHANNEL\Ciphers\NULL
  • SCHANNEL\Hashes\MD5
然后配置启用值的 DWORD 值数据为0xffffffff的以下注册表项中:

  • SCHANNEL\Ciphers\DES 56/56
  • SCHANNEL\Ciphers\Triple DES 168/168"[不适用于导出版本]
  • SCHANNEL\Hashes\SHA
  • SCHANNEL\KeyExchangeAlgorithms\PKCS

通过使用 FIPS 140-1 密码套件的主秘密计算

使用 SSL 3.0 中的套件不同于 TLS 1.0 中使用 FIPS 140-1 的密码套件的过程的 FIPS 140-1 加密过程。

在 SSL 3.0 中,下面是定义 master_secret 计算:

在 TLS 1.0 中,下面是定义 master_secret 计算:

其中:

选择 TLS 1.0 中使用仅 FIPS 140-1 密码套件的选项:

由于这一差别,客户可能希望禁止使用 SSL 3.0,即使密码套件允许的集被限制为仅 FIPS 140-1 密码套件的子集。在这种情况下,将启用值的 DWORD 值数据更改为0x0协议项下的以下注册表项中:

  • SCHANNEL\Protocols\SSL 3.0\Client
  • SCHANNEL\Protocols\SSL 3.0\Server
警告在这些协议项下的注册表项启用数值数据优先于包含 Schannel 凭据数据的 SCHANNEL_CRED 结构中定义的 grbitEnabledProtocols 值。默认启用数值数据为0xffffffff

注册表文件示例

文章的这一部分中提供了两个配置的注册表文件内容的示例。它们是 Export.reg 和非 export.reg。

在一台计算机,运行 Windows NT 4.0 服务包 6 可导出 Rasbase.dll 和 Schannel.dll 文件,运行 Export.reg,以确保仅使用 TLS 1.0 FIPS 密码套件由计算机。

计算机正在运行 Windows NT 4.0 服务包 6 中,其中包括不能出口的 Rasenh.dll 和 Schannel.dll 文件,运行非-export.reg,以确保仅使用 TLS 1.0 FIPS 密码套件由计算机。

对于 Schannel.dll 文件来识别 SCHANNEL 注册表项下的任何更改,必须重新启动计算机。

若要返回到默认的注册表设置,请删除 SCHANNEL 注册表项以及其下的所有内容。如果这些注册表项不存在,Schannel.dll 重新生成密钥,当您重新启动计算机。