限制在 Schannel.dll 中使用某些加密演算法和通訊協定

本文說明如何限制使用 Schannel.dll 檔案中的某些加密演算法和通訊協定。 此資訊也適用于獨立軟體廠商 (為 Microsoft 密碼編譯 (CAPI) 所撰寫的 ISV) 應用程式。

原始產品版本:   Windows Server 2003
原始 KB 編號:   245030

注意

本文適用于 Windows Server 2003 和舊版 Windows。 針對適用于 Windows Server 2008 和更新版本 Windows 的登錄機碼,請參閱 TLS 登錄設定

摘要

下列為 Windows NT 4.0 Service Pack 6 隨附的 (Csp) 所獲得的加密服務提供者(已授予憑證以進行 FIPS-140-1 加密驗證。

  • Microsoft 基本加密提供者 (Rsabase.dll)
  • Microsoft 增強型密碼服務提供者 (Rsaenh.dll) (非匯出版本)

Microsoft TLS/SSL 的安全性提供者(Schannel.dll 檔案)會使用這裡所列的 Csp,在其對 Internet Explorer 和 Internet Information Services (IIS) 的支援中,進行 SSL 或 TLS 的安全通訊。

您可以變更 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 基本 DSS 加密提供者 (Dssbase.dll) 或 Microsoft DS/Diffie-Hellman 增強型加密提供者 (Dssenh.dll) 。

密碼套件

SSL 3.0 和 TLS 1.0 (RFC2246) ,搭配 INTERNET-草稿 56 位匯出密碼套件 FOR TLS draft-ietf-tls-56-bit-ciphersuites-00.txt 提供使用不同密碼套件的選項。 每個密碼驗證套件會決定 SSL/TLS 會話中使用的金鑰交換、驗證、加密及 MAC 演算法。 當您同時使用 RSA 做為金鑰交換和驗證演算法時,「 rsa 」只會在對應的密碼套件定義中出現一次。

當您使用基本加密提供者或增強型密碼提供者時,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 3.0 文字中不會定義 SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA 和 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 特定登錄機碼

重要

這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必謹慎地依照這些步驟執行。 為了有多一層保護,請先備份登錄再進行修改。 如此一來,您就可以在發生問題時還原登錄。 如需如何備份及還原登錄的詳細資訊,請參閱 how to 備份及還原 Windows 中的登錄

注意

密碼 機碼機碼或 [ 雜湊 ] 機碼的內容所做的任何變更都會立即生效,不需要重新開機系統。

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

警告

在 [通訊協定] 機碼底下的登錄機碼中, DisabledByDefault 值,不會優先于包含 Schannel 認證之資料的結構中所定義的 grbitEnabledProtocolsSCHANNEL_CRED

SCHANNEL\Ciphers 子機碼

SCHANNEL 機碼底下的 [密碼] 登錄機碼是用來控制對稱演算法的使用,例如 DES 和 RC4。 以下是 密碼 機碼機碼底下的有效登錄機碼。

建立 SCHANNEL 密碼子項,格式為: SCHANNEL\(VALUE)\(VALUE/VALUE)

RC4 128/128

密碼子機碼: 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

密碼子機碼: SCHANNEL\Ciphers\Triple DES 168

此登錄機碼是指 ANSI X 9.52 和 Draft FIPS 46-3 中所指定的168位三重 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

    注意

    針對 Windows Vista 之前所發行的 Windows 版本,此機碼應該是 三重 DES 168/168

RC2 128/128

密碼子機碼: SCHANNEL\Ciphers\RC2 128/128

此登錄機碼是指128位 RC2。 不適用於匯出版本。

若要允許此密碼演算法,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0。 如果您未設定 enabled 值,則預設值是啟用。

RC4 64/128

密碼子機碼: SCHANNEL\Ciphers\RC4 64/128

此登錄機碼是指64位 RC4。 這不適用於「匯出」版本 (,但會在 Microsoft Money) 中使用。

若要允許此密碼演算法,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0。 如果您未設定 enabled 值,則預設值是啟用。

RC4 56/128

密碼子機碼: SCHANNEL\Ciphers\RC4 56/128

此登錄機碼是指56位 RC4。

若要允許此密碼演算法,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0。 如果您未設定 enabled 值,則預設值是啟用。

停用此演算法會有效禁止下列值:

  • TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

RC2 56/128

密碼子機碼: SCHANNEL\Ciphers\RC2 56/128

此登錄機碼是指56位 RC2。

若要允許此密碼演算法,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0。 如果您未設定 enabled 值,則預設值是啟用。

DES 56

密碼子機碼: SCHANNEL\Ciphers\RC2 56/56

此登錄機碼指的是 FIPS 46-2 中所指定的56位 DES。 其在 Rsabase.dll 和 Rsaenh.dll 檔案中的實施會在 FIPS 140-1 加密模組驗證程式中驗證。

若要允許此密碼演算法,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0。 如果您未設定 enabled 值,則預設值是啟用。

停用此演算法會有效禁止下列值:

  • SSL_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA

RC4 40/128

密碼子機碼: 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

密碼子機碼: 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

密碼子機碼: SCHANNEL\Ciphers\NULL

此登錄機碼表示沒有加密。 根據預設,會將它關閉。

若要關閉加密 (禁止所有密碼演算法) ,請將 Enabled 值的 DWORD 值資料變更為 0xffffffff。 否則,請將 DWORD 值資料變更為 0x0

散 列

密碼子機碼: SCHANNEL/Hashes

SCHANNEL 機碼底下的 [雜湊] 登錄機碼是用來控制散列演算法的使用,例如 SHA-1 和 MD5。 以下是 雜湊 碼機碼底下的有效登錄機碼。

MD5

密碼子機碼: SCHANNEL\Hashes\MD5

若要允許此雜湊演算法,請將 已啟用 值的 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

密碼子機碼: SCHANNEL\Hashes\SHA

此登錄機碼是指 (SHA-1) 的安全雜湊演算法,如 FIPS 180-1 中所指定。 其在 Rsabase.dll 和 Rsaenh.dll 檔案中的實施會在 FIPS 140-1 加密模組驗證程式中驗證。

若要允許此雜湊演算法,請將 已啟用 值的 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

密碼子機碼: SCHANNEL/KeyExchangeAlgorithms

SCHANNEL 機碼底下的 KeyExchangeAlgorithms 登錄機碼是用來控制金鑰交換演算法(如 RSA)的使用。 以下是 KeyExchangeAlgorithms 機碼底下的有效登錄機碼。

Pkcs

密碼子機碼: SCHANNEL\KeyExchangeAlgorithms\PKCS

此登錄機碼指的是 RSA 做為金鑰交換和驗證演算法。

若要允許 RSA,請將 已啟用 值的 DWORD 值資料變更為預設值 0xffffffff。 否則,請將 DWORD 資料變更為 0x0

停用 RSA 會有效地禁止所有 Windows NT4 SP6 Microsoft TLS/SSL 安全性提供者所支援的 RSA 型 SSL 和 TLS 密碼套件。

FIPS 140-1 密碼套件

您可能想要使用的 SSL 3.0 或 TLS 1.0 密碼套件,只會對應至 Microsoft 基本或增強型加密提供者所提供的 FIPS 46-3 或 fips 46-2 和 FIPS 180-1 演算法。

在本文中,我們會將它們稱為 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

若要使用 Microsoft TLS/SSL 安全性提供者或增強型密碼服務提供者所提供的 FIPS 140-1 密碼4.0 套件,請將下列登錄機碼中 已啟用 值的 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 中使用 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 密碼套件的子集。 在此情況下,在 [ 通訊協定 ] 機碼的下列登錄機碼中,將已啟用值的 DWORD 值資料變更為0x0:

  • SCHANNEL\Protocols\SSL 3.0\Client
  • SCHANNEL\Protocols\SSL 3.0\Server

警告

在 [通訊協定] 機碼 下的這些 登錄機碼中,[通訊協定] 機碼中所定義的 grbitEnabledProtocols 值,優先順序會高於包含 Schannel 認證之資料的結構中所定義的值 SCHANNEL_CRED 。 預設的 Enabled 值資料為 0xffffffff

登錄檔範例

在本文的本節中提供兩個用於設定之登錄檔內容的範例。 它們是匯出的 .reg 和 Non-export。

在執行 Windows NT 4.0 Service Pack 6 的電腦上,使用可匯出的 Rasbase.dll 和 Schannel.dll 檔案,請執行 Export .reg,以確保電腦只使用 TLS 1.0 FIPS 密碼套件。

在執行 Windows NT 4.0 Service Pack 6 的電腦上,其中包含不可匯出的 Rasenh.dll 和 Schannel.dll 檔案,請執行 Non-export,以確保電腦只使用 TLS 1.0 FIPS 密碼套件。

若要讓 Schannel.dll 檔案識別 SCHANNEL 登錄機碼底下的任何變更,您必須重新開機電腦。

若要將登錄設定傳回預設值,請刪除 SCHANNEL 登錄機碼及其底下的所有專案。 如果這些登錄機碼不存在,則 Schannel.dll 會在您重新開機電腦時重建金鑰。