傳輸層安全性 (TLS) 登錄設定
適用于:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10和舊版。
本文說明透過 Schannel Security Support Provider (SSP) ,實作傳輸層安全性 (TLS) 通訊協定和安全通訊端層 (SSL) 通訊協定的Windows登錄設定資訊。 本主題涵蓋的登錄子機碼和專案可協助您管理和疑難排解 Schannel SSP,特別是 TLS 和 SSL 通訊協定。
警告
這項資訊供您在進行疑難排解或確認必要的設定是否套用時做為參考之用。 建議您不要直接編輯登錄,除非已沒有其他替代方案。 登錄的修改在套用之前,登錄編輯程式或 Windows 作業系統並不會加以驗證。 因此可能會儲存不正確的值,而這將導致系統發生無法復原的錯誤。 可能的話,不要直接編輯登錄,請使用 群組原則 或其他Windows工具,例如 Microsoft Management Console (MMC) 。 如果您必須編輯登錄,必須非常小心。
CertificateMappingMethods
此項目依預設不存在於登錄中。 預設值是以下所列的四個憑證對應方法全都會受支援。
當伺服器應用程式要求用戶端驗證時,安全通道會自動嘗試將用戶端電腦所提供的憑證對應至使用者帳戶。 您可以建立對應,將憑證資訊與 Windows 使用者帳戶建立關係,來驗證使用用戶端憑證登入的使用者。 建立並啟用憑證對應之後,每當用戶端出示用戶端憑證時,您的伺服器應用程式便會自動將該名使用者與適當的 Windows 使用者帳戶產生關聯。
在大部分情況下,憑證會透過兩種方式之一對應至使用者帳戶:
- 單一憑證對應至單一使用者帳戶 (一對一對應)。
- 多個憑證對應至一個使用者帳戶 (多對一對應)。
根據預設,安全通道提供者會使用下列四個憑證對應方法 (依慣用程度列出):
- Kerberos service-for-user (S4U) 憑證對應
- 使用者主體名稱對應
- 一對一對應 (也稱為主體/簽發者對應)
- 多對一對應
適用版本:如本主題開頭的 [ 套用至 ] 清單所指定。
登錄路徑:HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
加密
TLS/SSL 加密應該藉由設定加密套件順序來控制。 如需詳細資訊,請參閱 設定 TLS 加密套件順序。
如需 Schannel SSP 所使用的預設加密套件順序相關資訊,請參閱 TLS/SSL 中的加密套件 (Schannel SSP) 。
CipherSuites
設定 TLS/SSL 加密套件應該使用群組原則、MDM 或 PowerShell 來完成,請參閱 設定 TLS 加密套件順序 以取得詳細資料。
如需 Schannel SSP 所使用的預設加密套件順序相關資訊,請參閱 TLS/SSL 中的加密套件 (Schannel SSP) 。
ClientCacheTime
此項目會控制作業系統使用戶端快取項目到期所需的時間量 (以毫秒為單位)。 若值為 0,將會關閉安全連線快取。 此項目依預設不存在於登錄中。
用戶端第一次透過安全通道 SSP 連線到伺服器時,會執行完整 TLS/SSL 信號交換。 此動作完成時,主要密碼、加密套件和憑證會分別儲存在用戶端和伺服器的工作階段快取中。
從 Windows Server 2008 和 Windows Vista 開始,預設用戶端快取時間為 10 小時。
登錄路徑:HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
EnableOcspStaplingForSni
線上憑證狀態通訊協定 (OCSP) 套用可讓網頁伺服器在 TLS 交握期間提供伺服器憑證的目前撤銷狀態,例如Internet Information Services (IIS) 。 此功能可減少 OCSP 伺服器上的負載,因為網頁伺服器可以快取伺服器憑證的目前 OCSP 狀態,並將它傳送至多個 Web 用戶端。 如果沒有這項功能,每個 Web 用戶端都會嘗試從 OCSP 伺服器擷取伺服器憑證的目前 OCSP 狀態。 這會在該 OCSP 伺服器上產生高負載。
除了 IIS 之外,透過 http.sys 的 Web 服務也可以受益于此設定,包括Active Directory 同盟服務 (AD FS) 和 Web 應用程式 Proxy (WAP) 。
根據預設,OCSP 支援會針對具有簡單安全 (SSL/TLS) 系結的 IIS 網站啟用。 不過,如果 IIS 網站使用下列兩種類型的 SSL/TLS 系結,則預設不會啟用此支援:
- 需要伺服器名稱指示
- 使用集中式憑證存放區
在此情況下,TLS 交握期間的伺服器 hello 回應預設不會包含 OCSP 裝訂狀態。 此行為可改善效能:Windows OCSP 裝訂實作會調整為數百個伺服器憑證。 由於 SNI 和 CCS 可讓 IIS 調整為可能具有數千個伺服器憑證的數千個網站,因此設定此行為預設為啟用,可能會導致效能問題。
適用版本:所有從 Windows Server 2012 和 Windows 8 開始的版本。
登錄路徑:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL]
新增下列機碼:
「EnableOcspStaplingForSni」=dword:00000001
若要停用,請將 DWORD 值設定為 0:
「EnableOcspStaplingForSni」=dword:000000000
注意
啟用此登錄機碼可能會對效能造成影響。
FIPSAlgorithmPolicy
此項目會控制美國聯邦資訊處理 (FIPS) 相容。 預設值是 0。
適用版本:所有從 Windows Server 2012 和 Windows 8 開始的版本。
登錄路徑:HKLM SYSTEM\CurrentControlSet\Control\LSA
Windows伺服器 FIPS 加密套件:請參閱Schannel SSP 中支援的加密套件和通訊協定。
雜湊
TLS/SSL 雜湊演算法應透過設定加密套件順序來控制。 如需詳細資訊,請參閱 設定 TLS 加密套件順序 。
IssuerCacheSize
此項目會控制簽發者快取大小,會與簽發者對應搭配使用。 Schannel SSP 會嘗試對應用戶端憑證鏈結中的所有簽發者,而不只是用戶端憑證的直接簽發者。 當簽發者未對應至帳戶時,這是一般情況,伺服器可能會嘗試重複對應相同的簽發者名稱,每秒數百次。
為避免此狀況,伺服器備有負快取,因此若簽發者名稱未對應至帳戶,該名稱將會新增至快取,安全通道 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 - 用戶端 RSA 金鑰大小
此專案會控制用戶端 RSA 金鑰大小。
應藉由設定加密套件順序來控制金鑰交換演算法的使用。
已在 Windows 10 1507 版和Windows Server 2016中新增。
登錄路徑:HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\PKCS
若要為 TLS 用戶端指定最小支援的 RSA 金鑰位長度範圍,請建立 ClientMinKeyBitLength 專案。 此項目依預設不存在於登錄中。 建立專案之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則 1024 位會是最小值。
若要為 TLS 用戶端指定 RSA 金鑰位長度的最大支援範圍,請建立 ClientMaxKeyBitLength 專案。 此項目依預設不存在於登錄中。 建立專案之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則不會強制執行最大值。
KeyExchangeAlgorithm - Diffie-Hellman金鑰大小
此專案會控制Diffie-Hellman金鑰大小。
使用金鑰交換演算法應該透過設定加密套件順序來控制。
已在 Windows 10 1507 版和Windows Server 2016中新增。
登錄路徑:HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman
若要指定 TLS 用戶端Diffie-Helman金鑰位長度的最低支援範圍,請建立 ClientMinKeyBitLength 專案。 此項目依預設不存在於登錄中。 建立專案之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則 1024 位會是最小值。
若要指定 TLS 用戶端Diffie-Helman金鑰位長度的最大支援範圍,請建立 ClientMaxKeyBitLength 專案。 此項目依預設不存在於登錄中。 建立專案之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則不會強制執行最大值。
若要指定 TLS 伺服器預設值的Diffie-Helman金鑰位長度,請建立 ServerMinKeyBitLength 專案。 此項目依預設不存在於登錄中。 建立專案之後,請將 DWORD 值變更為所需的位長度。 如果未設定,則 2048 位會是預設值。
MaximumCacheSize
此項目會控制快取元素的數目上限。 將 MaximumCacheSize 設為 0,會停用伺服器端工作階段快取並防止重新連線。 將 MaximumCacheSize 增加至預設值以上,會導致 Lsass.exe 耗用更多記憶體。 每個工作階段快取元素通常需要 2 到 4 KB 的記憶體。 此項目依預設不存在於登錄中。 預設值為 20,000 個元素。
適用版本:從 Windows Server 2008 和 Windows Vista 開始的所有版本。
登錄路徑:HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
傳訊 – 片段剖析
此專案會控制將接受的分散 TLS 交握訊息大小上限。 將不會接受大於允許大小的訊息,TLS 交握將會失敗。 根據預設,這些專案不存在於登錄中。
當您將值設定為0x0時,不會處理分散的訊息,而且會導致 TLS 交握失敗。 這會使目前電腦上的 TLS 用戶端或伺服器不符合 TLS RFC 規範。
允許的大小上限可以增加到 2^24-1 個位元組。 允許用戶端或伺服器讀取及儲存來自網路的大量未驗證資料不是好主意,而且會針對每個安全性內容耗用額外的記憶體。
已在 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
此項目會控制信任的簽發者清單傳送時所使用的旗標。 如果伺服器信任數百個憑證授權單位以進行用戶端驗證,在要求用戶端驗證時,伺服器將會有太多簽發者能夠將其全數傳送到用戶端電腦。 在此情況下,可以設定這個登錄機碼,安全通道 SSP 將不會傳送任何清單給用戶端,而不是傳送部分清單。
若未傳送信任的簽發者清單,可能會影響用戶端被要求提供用戶端憑證時所傳送的內容。 例如,當 Internet Explorer 收到用戶端驗證的要求時,它只會顯示鏈結至伺服器所傳送的其中一個憑證授權單位的用戶端憑證。 如果伺服器未傳送清單,Internet Explorer 將會顯示所有安裝在用戶端上的用戶端憑證。
此行為可能不妥當。 例如,當 PKI 環境包含跨憑證時,用戶端和伺服器憑證不會有相同的根 CA;因此,Internet Explorer 無法選擇鏈結至其中一個伺服器 CA 的憑證。 若將伺服器設定為不傳送信任的簽發者清單,Internet Explorer 將會傳送其所有的憑證。
此項目依預設不存在於登錄中。
預設傳送信任的簽發者清單行為
| 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
此項目會控制作業系統使伺服器端快取項目到期所需的時間量 (以毫秒為單位)。 若值為 0,將會停用伺服器端工作階段快取並防止重新連線。 將 ServerCacheTime 增加至預設值以上,會導致 Lsass.exe 耗用更多記憶體。 每個工作階段快取元素通常需要 2 到 4 KB 的記憶體。 此項目依預設不存在於登錄中。
適用版本:從 Windows Server 2008 和 Windows Vista 開始的所有版本。
登錄路徑:HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
預設伺服器快取時間:10 小時
TLS、DTLS 和 SSL 通訊協定版本設定
安全通道 SSP 會實作 TLS、DTLS 和 SSL 通訊協定的版本。 不同的Windows版本支援不同的通訊協定版本。 SSPI 呼叫者可以限制 (,但 SSPI 呼叫者可以限制一組 (D) TLS 和 SSL 版本,但無法) 透過在 AcquireCredentialsHandle呼叫中指定SCH_CREDENTIALS或SCHANNEL_CRED結構來擴充。 建議 SSPI 呼叫端使用系統預設值,而不是強制通訊協定版本限制。
支援的 (D) TLS 或 SSL 通訊協定版本可以存在於下列其中一種狀態:
- 已啟用:除非 SSPI 呼叫端使用 SCH_CREDENTIALS 結構明確停用此通訊協定版本,否則 Schannel SSP 可能會與支援的對等交涉此通訊協定版本。
- 預設為停用:除非 SSPI 呼叫端使用已被取代 的 SCHANNEL_CRED 結構明確要求此通訊協定版本,否則 Schannel SSP 將不會交涉此通訊協定版本。
- 已停用:無論 SSPI 呼叫端可指定的設定為何,安全通道 SSP 都不會交涉此通訊協定版本。
系統管理員可以藉由建立 DWORD 登錄值 「Enabled」 和 「DisabledByDefault」 來覆寫預設 (D) TLS 和 SSL 通訊協定版本設定。 這些登錄值會使用下列格式,針對名為 的登錄子機碼下的通訊協定用戶端和伺服器角色個別設定:
<SSL/TLS/DTLSmajor >< 版本號碼 > 。 <次要版本號碼 >< 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
若要覆寫系統預設值,並將支援的 D (D) TLS 或 SSL 通訊協定版本設定為 Enabled 狀態,請在對應的版本特定子機碼下建立名為 「Enabled」 的 DWORD 登錄值,以及名為 「DisabledByDefault」 且值為零的 DWORD 登錄值。
下列範例顯示 TLS 1.0 用戶端設定為 [已啟用 ] 狀態:

若要覆寫系統預設值,並將支援的 D (D) TLS 或 SSL 通訊協定版本設定為 Disabled by default 狀態,請在對應的版本特定子機碼下建立名為 「Enabled」 和 「DisabledByDefault」 的 DWORD 登錄值, 下列範例顯示 TLS 1.0 伺服器設定為 [預設為已停用 ] 狀態:

若要覆寫系統預設值,並將支援的 (D) TLS 或 SSL 通訊協定版本設定為 Disabled 狀態,請在對應的版本特定子機碼下,建立名為 「Enabled」 的 DWORD 登錄值,其值為零。
下列範例顯示登錄中已停用 DTLS 1.2:

將 (D) TLS 或 SSL 通訊協定版本 切換為 [預設停用 ] 或 [ 已停用 ] 狀態,可能會導致 AcquireCredentialsHandle 呼叫失敗,因為缺少全系統啟用的通訊協定版本,而且特定 SSPI 呼叫端同時允許。 此外,減少 Enabled (D) TLS 和 SSL 版本的集合可能會中斷與遠端對等的互通性。
一旦修改 (D) TLS 或 SSL 通訊協定版本設定,它們就會對使用後續 AcquireCredentialsHandle 呼叫所開啟的認證控制碼所建立的連線生效。 (D) TLS 和 SSL 用戶端和伺服器應用程式和服務,基於效能考慮,通常會重複使用認證控制碼來進行多個連線。 若要讓這些應用程式重新取得其認證控制碼,可能需要重新開機應用程式或服務。
請注意,這些登錄設定僅適用于安全通道 SSP,並不會影響任何可能安裝在系統上的協力廠商 (D) TLS 和 SSL 實作。