TLS 版本強制執行功能現在可在 Windows Server 2019 上依憑證系結使用

此文章的作者為

Andrew Marshall,主要安全性專案經理,客戶安全性與信任

加布裡埃爾黑山,核心網路的主要專案經理

Niranjan Inamdar,核心網路高級軟體工程師

網際網路資訊服務資深軟體工程師邁克爾·布朗

Ivan Pashov,主要軟體工程負責人,核心網路

2019 年 8 月

當全球工程師努力消除自己對 TLS 1.0 相依性時,他們遇到與客戶移轉整備平衡自身安全性需求的複雜挑戰。 到目前為止,我們已藉由 將 TLS 1.2 支援新增至舊版作業系統 ,在 IIS 中傳送 新的記錄格式來偵測用戶端的弱式 TLS 使用量 ,並提供 最新的技術指引來消除 TLS 1.0 相依性 ,以協助客戶解決這些問題。

現在,Microsoft 很高興在 Windows 中宣佈一項功能強大的新功能,讓您的轉換更容易轉換至 TLS 1.2+ 世界。 從KB4490481 開始,Windows Server 2019 現在可讓您封鎖弱式 TLS 版本,使其無法與您指定的個別憑證搭配使用。 我們稱之為「停用舊版 TLS」,並有效地在您選取的任何憑證上強制執行 TLS 版本和加密套件樓層。

停用舊版 TLS 也允許線上服務在同一個硬體上提供兩個不同的端點群組:一個只允許 TLS 1.2+ 流量,另一個則容納舊版 TLS 1.0 流量。 這些變更會在 HTTP.sys 中實作,並在發行其他憑證時允許流量路由傳送至具有適當 TLS 版本的新端點。 在此變更之前,部署這類功能需要額外的硬體投資,因為這類設定只能透過登錄設定全系統設定。

功能案例詳細資料

常見的部署案例在資料中心內具有混合需求的客戶有一組硬體:有些需要 TLS 1.2 作為目前強制執行的最小值,而其他硬體則不會移除 TLS 1.0 相依性。 圖 1 將 TLS 版本選取和憑證系結說明為截然不同的動作。 這是預設功能:

Default TLS Version selection

圖 1:預設 TLS 版本選取和憑證系結功能

  • secure.contoso.com 將您的客戶導向僅支援 TLS 1.2 和更新版本的服務端點。

  • legacy.contoso.com 將具有舊版 TLS 1.0 需求的客戶(例如仍移轉至 TLS 1.2 的客戶)導向至支援 TLS 1.0 的端點。 這可讓客戶完成 TLS 1.2 的整備測試,而不會中斷服務,且不會封鎖已準備好使用 TLS 1.2 的其他客戶。

傳統上,您需要兩個實體不同的主機來處理所有流量,並提供 TLS 版本強制執行,因為使用最低通訊協定版本的服務 TLS 要求需要透過全系統登錄設定停用較弱的通訊協定。 我們已將這項功能提升至堆疊,其中 TLS 會話系結至憑證,因此可以指派特定的最低 TLS 版本,如下圖 2 所述。

Enforcing minimum TLS version for a selected certificate

圖 2:停用舊版 TLS 功能,強制執行所選憑證的最低 TLS 版本,Secure.contoso.com。

功能部署指引

停用舊版 TLS 功能可以透過 網際網路資訊服務 (IIS) 伺服器 UI,透過 PowerShell 命令或 C++ HTTP.sys API 來部署。

選項 #1:IIS UI 設定(適用于 Windows 10 版本 2004 和 Windows Server 版本 2004 和更新版本)

建立 SSL 憑證 「secure.contoso.com」的網站系結,如下所示,然後核取 [停用舊版 TLS],然後按一下 [確定]。

IIS UI

選項 #2:PowerShell(適用于 Windows 10 版本 2004 和 Windows Server 版本 2004 和更新版本)

在 PowerShell 中,您可以參考 SSL 旗標,如下所示:

[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS

為它們建立較短的具名變數是很方便的:

$Sni = [Microsoft.Web.Administration.SslFlags]::Sni
    
$Sni\_CCS = [Microsoft.Web.Administration.SslFlags]::Sni + [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$CCS = [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$DisableLegacyTLS = [Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
    
 $storeLocation = "Cert:\\LocalMachine\\My"

建立網站系結至新月臺並停用舊版 TLS 的範例:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite with Sslflag DisableLegacyTLS 屬性值:

New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru

將網站系結新增至現有網站並停用舊版 TLS 的範例:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose

此外,您也可以使用 Netsh 對這項功能進行疑難排解和測試:

  • 新增系結:

    netsh HTTP add sslcert < regular parameters > disablelegacytls=enable

  • 更新現有的系結:

    netsh HTTP update sslcert < regular parameters > disablelegacytls=enable

  • 檢查是否在系結上設定:

    netsh HTTP show sslcert < 一般參數>

    監看停用舊版 TLS 版本:設定/未設定

選項 #3:C++ HTTP.sys API(現已推出)

除了停用舊版 TLS 之外,HTTP.sys 已新增下列專案:

  • HTTP_SERVICE_CONFIG_SSL_PARAM。DefaultFlags 現在支援下列新值:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET:針對特定 SSL 端點啟用/停用會話票證。

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS:針對特定 SSL 端點啟用/停用擴充事件記錄。 其他事件會記錄到 Windows 事件記錄檔。 目前僅支援一個事件,當 SSL 交握失敗時就會記錄。

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS:啟用/停用特定 SSL 端點的舊版 TLS 版本。 設定此旗標會停用該端點的 TLS1.0/1.1,並限制可用於 HTTP2 加密套件的加密套件。

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12:針對特定 SSL 端點啟用/停用 TLS1.2。

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2:針對特定 SSL 端點啟用/停用 HTTP/2。

啟用/停用 C++ 中每個憑證的這項功能最簡單的方式,是使用 HttpSetServiceConfiguration HTTP.sys API 所提供的HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS旗標。

設定 [停用舊版 TLS] 時,會強制執行下列限制:

  • 停用 SSL2、SSL3、TLS1.0 和 TLS1.1 通訊協定。

  • 停用加密加密加密 DES、3DES 和 RC4(因此只會使用 AES)。

  • 使用 CBC 鏈結模式停用加密加密 AES(因此只會使用 AES GCM)。

  • 停用 RSA 金鑰交換。

  • 停用金鑰大小小於 2048 的 DH 金鑰交換。

  • 停用金鑰大小小於 224 的 ECDH 金鑰交換。

即將在 docs.Microsoft.com 上取得這些變更的官方檔。

TLS 版本強制執行的後續步驟

停用舊版 TLS 提供強大的新功能,可在特定憑證/端點系結上強制執行 TLS 版本/加密套件層。 它也要求您規劃啟用此功能所發行憑證的命名。 一些考慮包括:

  • 我是否希望服務端點的預設路徑今天強制執行 TLS 1.2,並為需要 TLS 1.0 的使用者提供不同的憑證作為備份「舊版」存取點?

  • 我的預設、已在使用中的 Contoso 認證是否應該使用停用舊版 TLS? 如果是,我可能需要提供 legacy.contoso.com 憑證,並將它系結至允許 TLS 1.0 的端點。

  • 如何最好地將這些憑證的建議使用方式傳達給客戶?

您可以利用這項功能來滿足大型客戶群組的需求,這些客戶有義務使用 TLS 1.2+ 且仍在處理從 TLS 1.0 移轉的人員,而不需要額外的硬體支出。 除了現今在 Windows Server 2019 中提供個別憑證 TLS 版本系結的可用性之外,Microsoft 也會根據客戶需求,讓停用舊版 TLS 在線上服務之間取得。