限制某些加密算法和协议在 Schannel.dll
09/08/2020
本文内容
本文介绍如何限制某些加密算法和协议在安全文件的Schannel.dll使用。 此信息还适用于为 MICROSOFT 加密 API (CAPI) 编写的独立软件供应商 (ISV) 。
适用于: WindowsServer 2003
原始 KB 编号: 245030
备注
本文适用于 Windows Server 2003 和早期版本的 Windows。 有关适用于 Windows Server 2008 及更高版本的注册表项Windows,请参阅TLS Registry 设置。
摘要
以下加密服务提供商 () 4.0 Service Pack 6 Windows NT的 CSP 证书被授予 FIPS-140-1 加密验证证书。
Microsoft 基本加密提供程序 (Rsabase.dll)
Microsoft 增强加密提供程序 (Rsaenh.dll) (非导出版本)
Microsoft TLS/SSL 安全提供程序是 Schannel.dll 文件,它使用此处列出的 CSP 通过 SSL 或 TLS 进行安全通信,以支持 Internet Explorer 和 Internet Information Services (IIS) 。
你可以更改密码Schannel.dll以支持加密套件 1 和 2。 但是,该程序还必须支持密码套件 1 和 2。 IIS 4.0 和 5.0 不支持密码套件 1 和 2。
本文包含为 Windows NT 4.0 Service Pack 6 和更高版本配置 TLS/SSL 安全提供程序的必要信息。 您可以使用 Windows 注册表控制对基本加密提供程序或增强加密提供程序支持的加密算法的特定 SSL 3.0 或 TLS 1.0 密码套件的使用。
备注
在 Windows NT 4.0 Service Pack 6 中,Schannel.dll 文件不使用 Microsoft Base DSS 加密提供程序 (Dssbase.dll) 或 Microsoft DS/Diffie-Hellman 增强加密提供程序 (Dssenh.dll) 。
密码套件
SSL 3.0 和 TLS 1.0 (RFC2246) (适用于 TLS draft-ietf-tls-56-bit-ciphersuites-00.txt的 INTERNET-DRAFT 56 位导出密码套件)都提供使用不同的密码套件的选项。 每个密码套件确定 SSL/TLS 会话中使用的密钥交换、身份验证、加密和 MAC 算法。 当你将 RSA 同时用作密钥交换和身份验证算法时, 术语 RSA 仅在相应的密码套件定义中出现一次。
在使用Windows NT加密提供程序或增强加密提供程序时,Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL 安全提供程序支持以下 SSL 3.0 定义的 CipherSuite:
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 SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA 3.0 SSL_RSA_EXPORT1024_WITH_RC4_56_SHA中未定义两者。 但是,一些 SSL 3.0 供应商支持它们。 这包括 Microsoft。
Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL 安全提供程序在使用基本加密提供程序或增强加密提供程序时还支持以下 TLS 1.0 定义的 CipherSuite:
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 Service Pack 6 Microsoft TLS/SSL 安全提供程序遵循 SSL 3.0 和 TLS 1.0 中指定的使用这些密码套件以确保互操作性的过程。
特定于 Schannel 的注册表项
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 若要详细了解如何备份和还原注册表,请参阅如何在 Windows 中备份和还原注册表。
备注
对 CIPHERS 密钥或 HASHES 密钥内容的任何更改将立即生效,无需重新启动系统。
SCHANNEL 密钥
启动注册表编辑器 (Regedt32.exe) ,然后找到以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
SCHANNEL\Protocols 子项
若要使系统能够使用默认情况下不会协商的协议 (如 TLS 1.1 和 TLS 1.2) ,在"协议"项下的以下注册表项中,将 DisabledByDefault 值的 DWORD 值数据更改为 0x0:
SCHANNEL\Protocols\TLS 1.1\Client
SCHANNEL\Protocols\TLS 1.1\Server
SCHANNEL\Protocols\TLS 1.2\Client
SCHANNEL\Protocols\TLS 1.2\Server
警告
Protocols 项下的注册表项中的 DisabledByDefault 值不优先于在包含 Schannel 凭据数据的结构中定义的 grbitEnabledProtocols 值。 SCHANNEL_CRED
SCHANNEL\Ciphers 子项
SCHANNEL 项下的 Ciphers 注册表项用于控制对称算法(如 DES 和 RC4)的使用。 以下是 Ciphers 项下的有效注册表项。
以以下格式创建 SCHANNEL Ciphers 子项: SCHANNEL\(VALUE)\(VALUE/VALUE)
RC4 128/128
Ciphers 子项: SCHANNEL\Ciphers\RC4 128/128
此子项引用 128 位 RC4。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 或者,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。 此注册表项不适用于没有 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
三重 DES 168
Ciphers 子项: SCHANNEL\Ciphers\Triple DES 168
此注册表项引用 ANSI X9.52 和草稿 FIPS 46-3 中指定的 168 位 Triple DES。 此注册表项不适用于导出版本。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 或者,将 DWORD 数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
禁用此算法可有效地禁止以下值:
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
备注
对于 Vista Windows之前Windows的版本,密钥应为 Triple DES 168/168。
RC2 128/128
Ciphers 子项: SCHANNEL\Ciphers\RC2 128/128
此注册表项引用 128 位 RC2。 它不适用于导出版本。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
RC4 64/128
Ciphers 子项: SCHANNEL\Ciphers\RC4 64/128
此注册表项引用 64 位 RC4。 它不适用于导出版本 (但用于 Microsoft Money) 。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
RC4 56/128
Ciphers 子项: SCHANNEL\Ciphers\RC4 56/128
此注册表项引用 56 位 RC4。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
禁用此算法可有效地禁用以下值:
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
RC2 56/128
Ciphers 子项: SCHANNEL\Ciphers\RC2 56/128
此注册表项引用 56 位 RC2。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
DES 56
Ciphers 子项: SCHANNEL\Ciphers\DES 56/56
此注册表项引用 FIPS 46-2 中指定的 56 位 DES。 FIPS 140-1 加密模块验证Rsabase.dll和加密Rsaenh.dll验证程序中的实现。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
禁用此算法可有效地禁止以下值:
SSL_RSA_WITH_DES_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
RC4 40/128
Ciphers 子项: SCHANNEL\Ciphers\RC4 40/128
此注册表项引用 40 位 RC4。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
禁用此算法可有效地禁止以下值:
SSL_RSA_EXPORT_WITH_RC4_40_MD5
TLS_RSA_EXPORT_WITH_RC4_40_MD5
RC2 40/128
Ciphers 子项: SCHANNEL\Ciphers\RC2 40/128
此注册表项引用 40 位 RC2。
若要允许此密码算法,将 Enabled 值的 DWORD 值数据 更改为0xffffffff。 否则,将 DWORD 值数据更改为 0x0。 如果未配置 Enabled 值, 则启用默认值。
禁用此算法可有效地禁止以下值:
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
NULL
Ciphers 子项: SCHANNEL\Ciphers\NULL
此注册表项表示不加密。 默认情况下,它已关闭。
若要关闭加密 (禁用所有加密) ,请更改 Enabled 值的 DWORD 值数据以 0xffffffff。 否则,将 DWORD 值数据更改为 0x0。
哈希
Ciphers 子项: SCHANNEL/Hashes
SCHANNEL 项下的 Hashes 注册表项用于控制哈希算法(如 SHA-1 和 MD5)的使用。 以下是哈希项下的有效 注册表 项。
MD5
Ciphers 子项: SCHANNEL\Hashes\MD5
若要允许此哈希算法,将 Enabled 值的 DWORD 值数据更改为默认值 0xffffffff。 否则,将 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
SHA
Ciphers 子项: SCHANNEL\Hashes\SHA
此注册表项引用 SHA-1 (安全哈希算法) FIPS 180-1 中指定。 FIPS 140-1 加密模块验证Rsabase.dll和加密Rsaenh.dll验证程序中的实现。
若要允许此哈希算法,将 Enabled 值的 DWORD 值数据更改为默认值 0xffffffff。 否则,将 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
Ciphers 子项: SCHANNEL/KeyExchangeAlgorithms
SCHANNEL 项下的 KeyExchangeAlgorithms 注册表项用于控制密钥交换算法(如 RSA)的使用。 以下是 KeyExchangeAlgorithms 项 下的有效注册表项。
PKCS
Ciphers 子项: SCHANNEL\KeyExchangeAlgorithms\PKCS
此注册表项将 RSA 引用为密钥交换和身份验证算法。
若要允许 RSA,将 Enabled 值的 DWORD 值数据更改为默认值 0xffffffff。 否则,将 DWORD 数据更改为 0x0。
禁用 RSA 可有效禁止 Windows NT4 SP6 Microsoft TLS/SSL 安全提供程序支持的所有基于 RSA 的 SSL 和 TLS 密码套件。
FIPS 140-1 密码套件
你可能希望仅使用这些与 Microsoft 基础或增强加密提供程序提供的 FIPS 46-3 或 FIPS 46-2 和 FIPS 180-1 算法对应的 SSL 3.0 或 TLS 1.0 密码套件。
本文将它们视为 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
若要仅按照此处定义并受 Windows NT 4.0 Service Pack 6 Microsoft TLS/SSL 安全提供程序与基本加密提供程序或增强加密提供程序的支持,将以下注册表项中 Enabled 值的 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
并配置以下注册表项中 Enabled 值的 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 中使用 FIPS 140-1 密码套件的过程与在 TLS 1.0 中使用 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 密码套件的子集。 在这种情况下,将 Enabled 值的 DWORD 值数据更改为0x0"协议"项下的以下 注册表 项:
SCHANNEL\Protocols\SSL 3.0\Client
SCHANNEL\Protocols\SSL 3.0\Server
警告
这些注册表项中 Protocols 项下的 Enabled 值数据优先于在包含 Schannel 凭据数据的结构中定义的 grbitEnabledProtocols SCHANNEL_CRED 值。 默认 Enabled 值数据为 0xffffffff。
注册表文件示例
本文的这一节提供了用于配置的注册表文件内容的两个示例。 它们是 Export.reg 和 Non-export.reg。
在运行包含可导出 Rasbase.dll 和 Schannel.dll 文件的 Windows NT 4.0 Service Pack 6 的计算机上,运行 Export.reg 以确保计算机仅使用 TLS 1.0 FIPS 密码套件。
在运行 Windows NT 4.0 Service Pack 6(包括不可导出的 Rasenh.dll 和 Schannel.dll 文件)的计算机上,运行 Non-export.reg 以确保计算机仅使用 TLS 1.0 FIPS 密码套件。
若要Schannel.dll文件识别 SCHANNEL 注册表项下的任何更改,必须重新启动计算机。
若要将注册表设置返回为默认值,请删除 SCHANNEL 注册表项及其下的所有项。 如果不存在这些注册表项,则Schannel.dll重新启动计算机时重新构建这些注册表项。