如何在 Schannel.dll 中限制使用特定的密碼編譯演算法和通訊協定

如何在 Schannel.dll 中限制使用特定的密碼編譯演算法和通訊協定 此資訊也適用于針對 Microsoft 密碼編譯 API (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 Base Cryptographic Provider (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 基礎 DSS 密碼編譯提供者 (Dssbase.dll) 或 Microsoft DS/Diffie-Cryptman 增強型密碼編譯提供者 (Dssenh.dll)。

加密套件

SSL 3.0 和 TLS 1.0 (RFC2246) 搭配 INTERNET-DRAFT 用於 TLS draft-ietf-tls-56-bit-ciphersuites-00.txt 的 56 位元匯出加密套件 提供使用不同加密套件的選項。 每個加密套件都會決定 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 中所指定,以確保互通性。

安全通道特定登錄機碼

重要事項

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

警告

通訊協定機碼下登錄機碼中的 DisabledByDefault 值不會優先于包含安全通道認證資料之 SCHANNEL_CRED 結構中定義的 grbitEnabledProtocols 值。

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

Triple DES 168

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

    注意事項

    針對 Windows Vista 之前發行的 Windows 版本,金鑰應該是 Triple 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\DES 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

NULL

加密子機碼: SCHANNEL\Ciphers\NULL

此登錄機碼表示沒有加密。 預設情況下會關閉。

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

雜湊

加密子機碼: SCHANNEL/Hashes

SCHANNEL 金鑰下的雜湊登錄機碼可用來控制雜湊演算法的使用,例如 SHA-1 和 MD5。 以下是 雜湊 機碼下的有效登錄機碼。

MD5

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

加密子機碼: SCHANNEL\Hashes\SHA

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

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

加密子機碼: SCHANNEL/KeyExchangeAlgorithms

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

PKCS

加密子機碼: SCHANNEL\KeyExchangeAlgorithms\PKCS

此登錄機碼會將 RSA 稱為金鑰交換和驗證演算法。

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

停用 RSA 實際上不允許 Windows NT4 SP6 Microsoft TLS/SSL 安全性提供者支援的所有 RSA 型 SSL 和 TLS 加密套件。

FIPS 140-1 加密套件

您可能只需要使用對應至 FIPS 46-3 或 FIPS 46-2 和 MICROSOFT 基礎或增強型密碼編譯提供者所提供的 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

若只要使用這裡所定義的 FIPS 140-1 加密套件,並由 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 加密套件的選項:

由於這項差異,即使允許的加密套件集僅限於 FIPS 140-1 加密套件的子集,客戶可能會需要禁止使用 SSL 3.0。 在此情況下,請將 Enabled 值的 DWORD 值資料變更為 [通訊協定] 金鑰下的下列登錄機碼中的 0x0:

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

警告

通訊協定金鑰下這些登錄機碼中的 Enabled 值資料優先于包含安全通道認證資料之 SCHANNEL_CRED 結構中定義的 grbitEnabledProtocols 值。 預設的 Enabled 值資料為 0xffffffff

登錄檔案的範例

本文的這一節提供兩個組態的登錄檔案內容範例。 它們是 Export.reg 和 Non-export.reg。

在執行 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.reg 以確保電腦只使用 TLS 1.0 FIPS 加密套件。

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

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