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 版本選取和憑證系結說明為截然不同的動作。 這是預設功能:
圖 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 所述。
圖 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],然後按一下 [確定]。
選項 #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_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 在線上服務之間取得。