此文章的作者為
Andrew Marshall,主要安全性專案經理,客戶安全性與信任
Gabriel Montenegro, 核心網路主要計劃經理
Niranjan Inamdar,核心網路高級軟體工程師
Michael Brown,Internet Information Services 高級軟體工程師
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 版本,如下圖 2 所述。
圖 2:停用舊版 TLS 功能,強制執行所選憑證的最低 TLS 版本,Secure.contoso.com。
功能部署指引
停用舊版 TLS 功能可以透過 Internet Information Services (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 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 <常規參數> disablelegacytls=enable
更新現有的系結:
netsh http update sslcert <常規參數> 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 在其線上服務中可用。