分享方式:


傳輸層安全性 (TLS) 登錄設定

本文說明透過 SChannel Security Support Provider (SSP) 實現 Transport Layer Security (TLS) 協定和 Secure Sockets Layer (SSL) 協定 Windows 支援的登錄檔設定資訊。 本文中介紹的登錄子機碼和項目可以幫助您管理 SChannel SSP 並排除問題,具體地說,是 TLS 和 SSL 協定。

警告

這項資訊供您在進行疑難排解或確認必要的設定是否套用時做為參考之用。 建議您不要直接編輯登錄,除非已沒有其他替代方案。 登錄的修改在套用之前,登錄編輯程式或 Windows 作業系統並不會加以驗證。 因此可能會儲存不正確的值,而這將導致系統發生無法復原的錯誤。 盡可能使用 Group Policy 或其他 Windows 工具,例如 Microsoft Management Console (MMC),而不直接編輯登錄檔。 如果您必須編輯登錄,必須非常小心。

Schannel 記錄

SChannel 事件有八個記錄層級儲存在系統事件記錄檔中,並可使用事件檢視器檢視。 此登錄路徑會儲存在 HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL EventLogging 機碼底下,並將 DWORD 值設定為 1

十進位或十六進位 SChannel 記錄事件
0 沒有任何事件
1 錯誤事件
2 警告事件
3 錯誤和警告事件
4 資訊與成功事件
5 錯誤、資訊和成功事件
6 警告、資訊和成功事件
7 錯誤、警告、資訊及成功事件

注意

在變更 SChannel 記錄等級之後,您必須重新啟動您的裝置。

CertificateMappingMethods

當伺服器應用程式需要使用者端驗證時,SChannel 會自動嘗試將使用者端電腦提供的憑證對應到使用者帳戶。 您可以建立對應,將憑證資訊與 Windows 使用者帳戶建立關係,來驗證使用用戶端憑證登入的使用者。

建立並啟用憑證對應之後,每當用戶端出示用戶端憑證時,您的伺服器應用程式便會自動將該名使用者與適當的 Windows 使用者帳戶產生關聯。

在大部分情況下,憑證會透過兩種方式之一對應至使用者帳戶:

  • 單一憑證對應至單一使用者帳戶 (一對一對應)。
  • 多個憑證對應至一個使用者帳戶 (多對一對應)。

SChannel 提供者使用四種憑證對應方法:

  1. Kerberos 使用者服務 (S4U) 對應 (預設為啟用)
  2. 使用者主體名稱對應
  3. 一對一對應 (也稱為主體/簽發者對應)
  4. 多對一對應

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

項目名稱 下載 預設為啟用
主旨/簽發者 0x000000001 No
簽發者 0x000000002 No
UPN 0x000000004 No
S4U2Self 0x000000008 Yes
S4U2Self Explicit 0x000000010 Yes

適用的版本:如本文開頭的 [適用於] 列表所指定

加密

TLS/SSL 密碼應該透過設定密碼套件順序來控制。 有關詳細資訊,請參閱配置 TLS Cipher Suite Order。

如需有關 SChannel SSP 使用的預設密碼套件順序的資訊,請參閱 TLS/SSL中的 Cipher Suites (SChannel SSP)。

CipherSuites

若要使用組策略、MDM 或 PowerShell 設定 TLS/SSL 加密套件,請參閱 設定 TLS 加密套件順序 以取得詳細數據。

如需有關 SChannel SSP 使用的預設密碼套件順序的資訊,請參閱 TLS/SSL中的 Cipher Suites (SChannel SSP)。

ClientCacheTime

此項目指定使用者端 TLS 工作階段快取項目留存期 (以毫秒為單位)。 從 Windows Server 2008 和 Windows Vista 開始,預設值為 10 小時。 值 0,將關閉客戶端上的 TLS 會話快取。

當客戶端第一次透過 SChannel SSP 連線到伺服器時,會執行完整的 TLS/SSL 握手。 完成時,主要密碼、加密套件和憑證會儲存在個別客戶端和伺服器上的會話快取中。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

EnableOcspStaplingForSni

Online Certificate Status Protocol (OCSP) 裝訂可讓 網路伺服器 (例如 Internet Information Services (IIS)) 在 TLS 握手期間傳送伺服器憑證至使用者端時,提供伺服器憑證的目前撤銷狀態。 此功能可減輕 OCSP 伺服器的負載,因為網路伺服器可以快取伺服器憑證的目前 OCSP 狀態,並將其傳送至多個網路使用者端。 若沒有這項功能,每個網路使用者端都會嘗試從 OCSP 伺服器擷取伺服器憑證的目前 OCSP 狀態。 這會在 OCSP 伺服器上產生高負載。

除了 IIS 之外,透過 http.sys 的網路服務也可以從這項設定中獲益,包括 Active Directory Federation Services (AD FS) 和 Web Application Proxy (WAP)。

依預設,具有簡單安全 (SSL/TLS) 繫結的 IIS 網站會啟用 OCSP 支援。 但是,如果 IIS 網站正在使用下列其中一種型別的 SSL/TLS 繫結,則預設不會啟用這項支援:

  • 需要 Servier Name Indication
  • 使用集中式憑證存放區

在此情況下,TLS 交握期間的伺服器 hello 回應預設不包含 OCSP 裝訂狀態。 此行為可改善效能:Windows OCSP 裝訂實作可擴充至數百個伺服器憑證。 不過,伺服器名稱指示 (SNI) 和中央證書存儲 (CCS) 可讓 IIS 調整為數千個可能有數千個伺服器證書的網站,因此啟用 CCSP 系結的 OCSP 裝訂可能會導致效能問題。

適用版本:所有以 Windows Server 2012 和 Windows 8 開頭的版本。

登入路徑: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

新增下列機碼:

"EnableOcspStaplingForSni"=dword:00000001

若要停用,請將 DWORD 值設為0:

"EnableOcspStaplingForSni"=dword:00000000

注意

啟用此登錄檔機碼可能對效能有影響。

雜湊

TLS/SSL 雜湊演算法應該透過設定密碼套件順序來控制。 如需詳細資訊,請參閱設定 TLS Cipher Suite Order。

IssuerCacheSize

此項目控制簽發者快取的大小,並且用於簽發者對應。 SChannel SSP 嘗試對應客戶憑證鏈中的所有發行者,而不只是客戶憑證的直接簽發者。 通常情況下,當簽發者沒有對應到某個帳戶時,伺服器可能會嘗試重複對應同一簽發者名稱,每秒數百次。

若要避免這種情況,伺服器具有負數快取,因此如果簽發者名稱未對應至帳戶,則會將它新增至快取,且 SChannel SSP 不會嘗試在快取專案到期之前再次對應簽發者名稱。 此登錄項目會指定快取大小。 預設情況下,此項目不存在登錄檔中。 預設值是 100

適用版本:所有以 Windows Server 2008 和 Windows Vista 開頭的版本。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

IssuerCacheTime

此項目會控制快取逾時間隔的長度 (以毫秒為單位)。 SChannel SSP 嘗試對應客戶憑證鏈中的所有發行者,而不只是客戶憑證的直接簽發者。 如果簽發者沒有對應到一個帳戶 (這是典型情況),伺服器可能會嘗試重複對應相同的簽發者名稱,每秒數百次。

若要避免這種情況,伺服器具有負數快取,因此如果簽發者名稱未對應至帳戶,則會將它新增至快取,且 SChannel SSP 不會嘗試在快取專案到期之前再次對應簽發者名稱。 由於效能原因,保留此快取,因此系統不會繼續嘗試對應相同的簽發者。 預設情況下,此項目不存在登錄檔中。 預設值為 10 分鐘。

適用版本:所有以 Windows Server 2008 和 Windows Vista 開頭的版本。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

KeyExchangeAlgorithm 機碼大小

根據預設,下列專案可能不存在於登錄中,而且必須手動建立。 機碼交換演算法的使用應該透過配置密碼套件順序來控制。 若要深入瞭解 TLS/SSL 加密套件密碼編譯演算法,請參閱 TLS/SSL 中的加密套件(SChannel SSP)。

已在 Windows 10 版本 1507 和 Windows Server 2016 中新增。

登入路徑: HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman

若要指定 TLS 用戶端的 Diffie-Hellman 金鑰位長度下限支援範圍,請建立 ClientMinKeyBitLength 專案。 建立項目之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則最少需要 1024 位元。

注意

配置的橢圓曲線決定 ECDHE 金鑰交換的加密強度。 請參閱 Manage Transport Layer Security (TLS),了解詳細資訊。

MaximumCacheSize

此項目控制快取 TLS 會話的最大數量。 將 MaximumCacheSize 設定為 0 停用伺服器端會話快取,以防止會話繼續。 在預設值上方增加 MaximumCacheSize 會導致Lsass.exe耗用額外的記憶體。 每個工作階段快取元素通常需要 2 KB 到 4 KB 的記憶體。 預設情況下,此項目不存在登錄檔中。 預設值為 20,000 個元素。

適用版本:所有以 Windows Server 2008 和 Windows Vista 開頭的版本。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

訊息 — 片段語法分析

此專案會控制已接受之 TLS 交握訊息的允許大小上限。 不接受大於允許大小的訊息,TLS 交握會失敗。 依預設,這些項目不在登錄檔中。

當您將值設定為 0x0時,不會處理分散的訊息,並導致TLS交握失敗。 這使得目前電腦上的 TLS 客戶端或伺服器與 TLS RFC 不相容。

允許的大小上限可以增加到 2^16 個位元組。 允許客戶端或伺服器讀取和儲存來自網路的大量未驗證數據並不是個好主意,而且會針對每個安全性內容耗用額外的記憶體。

在 Windows 7 和 Windows Server 2008 R2 中新增:提供可讓 Windows XP、Windows Vista 或 Windows Server 2008 中的 Internet Explorer 解析片段的 TLS/SSL 握手訊息更新。

登入路徑: HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Messaging

若要指定 TLS 用戶端接受的片段 TLS 交握訊息允許的大小上限,請建立 MessageLimitClient 專案。 建立項目之後,請將 DWORD 值變更為所需的位長度。 如果未設定,預設值為 0x8000 位元組。

若要指定 TLS 伺服器在沒有客戶端驗證時所接受之分散 TLS 交握訊息的大小上限,請建立 MessageLimitServer 專案。 建立項目之後,請將 DWORD 值變更為所需的位長度。 若未設定,預設值為 0x4000 位元組。

若要指定 TLS 伺服器在用戶端驗證時接受的分散 TLS 交握訊息大小上限,請建立 MessageLimitServerClientAuth 專案。 建立項目之後,請將 DWORD 值變更為所需的位長度。 若未設定,預設值為 0x8000 位元組。

SendTrustedIssuerList

要求客戶端驗證時,TLS 伺服器可能會傳送可接受的證書頒發機構單位辨別名稱清單。 這有助於 TLS 用戶端選取適當的 TLS 用戶端憑證。 預設情況下,基於 SChannel 的 TLS 伺服器不會傳送此受信任簽發者清單,因為會向被動觀察者公開伺服器受信任的憑證機構,並且還增加在 TLS 握手過程中交換的資料量。 將此值設定為 1,會導致 SChannel 伺服器傳送其受信任的簽發者清單。

若未傳送受信任的簽發者清單,可能會影響用戶端在要求客戶端憑證時所傳送的內容。 例如,當Microsoft Edge 收到客戶端驗證要求時,它只會顯示鏈結至伺服器所傳送之其中一個證書頒發機構單位的客戶端憑證。 如果伺服器未傳送清單,Microsoft Edge 會顯示安裝在用戶端上的所有客戶端憑證。

此行為可能不妥當。 例如,當 PKI 環境包含跨憑證時,用戶端和伺服器憑證沒有相同的根 CA。 因此,Microsoft Edge 無法選擇鏈結至其中一個伺服器 CA 的憑證。 當伺服器未傳送受信任的簽發者清單時,TLS 用戶端可能會提供任何可用的客戶端憑證。 預設情況下,此項目不存在登錄檔中。

Default Send Trusted Issuer List behavior

Windows 版本 預設行為
Windows Server 2012、Windows 8 和更新版本 FALSE
Windows Server 2008 R2、Windows 7 及更早版本 TRUE

適用版本:所有以 Windows Server 2008 和 Windows Vista 開頭的版本。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

ServerCacheTime

此專案指定伺服器 TLS 工作階段快取項目留存期 (以毫秒為單位)。 預設為 10 小時。 值 0,將關閉伺服器上的 TLS 會話快取,並防止會話恢復。 將 ServerCacheTime 增加至預設值以上,會導致 Lsass.exe 耗用更多記憶體。 每個工作階段快取元素通常需要 2 KB 至 4 KB 的記憶體。 預設情況下,此項目不存在登錄檔中。

適用版本:所有以 Windows Server 2008 和 Windows Vista 開頭的版本。

登入路徑: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

預設伺服器快取時間:10 小時

TLS、DTLS 和 SSL 協定版本設定

SChannel SSP 實作 TLS、DTLS 和 SSL 協定的版本。 不同的 Windows 版本支援不同的協定版本。 SSPI 呼叫者可在 AcquireCredentialsHandle 呼叫中指定 SCH_CREDENTIALS 結構,以限制 (但無法展開) 全系統可用的 (D)TLS 和 SSL 版本集。 建議 SSPI 呼叫者使用系統預設值,而不是強制使用協定版本限制。

支援的 (D)TLS 或 SSL 協定版本可以存在於下列其中一種狀態:

  • 已啟用:除非 SSPI 呼叫端使用 SCH_CREDENTIALS 結構明確停用此通訊協定版本,否則 SChannel SSP 可能會與支援的對等交涉此通訊協定版本。
  • 已停用:不論 SSPI 呼叫端可能指定的設定為何,SChannel SSP 都不會交涉此通訊協定版本。

這些登入值分別針對協定使用者端和伺服器角色,在命名為登錄子機碼下,使用下列格式進行設定:

<SSL/TLS/DTLS> <major version number>.<minor version number><Client\Server>

您可以在下列登錄檔路徑下建立這些版本特定的子機碼:

  • HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

例如,以下是一些具有版本特定子機碼的有效登錄檔路徑:

  • HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client

  • HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server

  • HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\DTLS 1.2\Client

若要覆寫系統預設值,並將支援的 TLS 或 SSL 通訊協定版本設定為 Enabled 狀態,請在對應的版本特定子機碼下建立名為 Enabled 且專案值為 “1” 的 DWORD 登錄值。

下列範例顯示 TLS 1.0 使用者端設定為 Enabled 狀態:

設定 TLS 1.0 用戶端以在 Windows Server 登錄設定中啟用的螢幕快照。

若要覆寫系統預設值,並將支援的 TLS 或 SSL 通訊協定版本設定為 Disabled 狀態,請將 對應的版本特定子機碼下的 DWORD 登錄值 Enabled 變更為 “0”。

下列範例顯示在登錄檔中停用的 DTLS 1.2:

默認設為停用之 DTLS 1.2 的 Windows Server 登錄設定螢幕快照。

將 (D)TLS 或 SSL 通訊協定版本切換為 Disabled 狀態可能會導致 AcquireCredentialsHandle 呼叫失敗,因為缺少啟用全系統的通訊協定版本,而且同時允許特定 SSPI 呼叫端。 此外,減少一組 Enabled (D)TLS 和 SSL 版本可能會中斷與遠端對等的互操作性。

修改 (D)TLS 或 SSL 通訊協定版本設定之後,它們就會對使用後續 AcquireCredentialsHandle 呼叫所開啟的認證句柄所建立的連線生效。 (D)TLS 和 SSL 客戶和伺服器應用程式和服務傾向於為多個連線重複使用驗證把手,這是出於效能上的考慮。 若要讓這些應用程式重新取得其認證句柄,可能需要應用程式或服務重新啟動。

這些登錄設定僅適用於 SChannel SSP,且不會影響任何可能安裝在系統上的第三方 (D)TLS 和 SSL 實作。

警告

不建議嘗試建立或調整本文中未明確詳述的任何 SChannel 登錄設定,因為可能引發於不支援的設定的潛在風險和意外後果。

若要瞭解如何使用 PowerShell 管理 TLS 加密套件,請參閱 TLS 命令參考。 如果有興趣透過組策略管理 TLS 設定,請參閱 使用組策略設定 TLS 加密套件順序。