系統停用 TLS 1.0 的 .NET 調整對策
系統停用 TLS 1.0 時,讓現有 .NET 程式支援 TLS 1.2 的處理方式。
背景資訊
現有程式的 .NET Framework 版本,有:
- 3.5 WebForms
- 4.5 WebForms, 4.5, 4.7 MVC
- Core 2.1
專案的執行環境
- Windows Server 2008 R2 SP1
最佳做法
- 將應用程式調整為使用作業系統(OS)所支援的 TLS 版本。
- 在 Windows 上啟用 TLS 1.2。
使用作業系統(OS)所支援的 TLS 版本
為了確保 .NET Framework 應用程式的安全性,TLS 版本最好不要寫死在程式中。應使用作業系統(OS)所支援的 TLS 版本。
- ASP.NET 應用程式以
.NET Framework 4.7
或更新版本作為目標,預設就會使用 OS 決定的 TLS 版本。 - WCF 應用程式以
.NET Framework 4.7.1
或更新版本作為目標,預設就會使用 OS 決定的 TLS 版本。 - 確認程式中沒有指定 TLS 版本。
當應用程式讓 OS 選擇 TLS 版本時有以下優點:
- 它會自動運用於未來新增的新通訊協定,例如 TLS 1.3。
- OS 會封鎖被發現不安全的通訊協定。
調整應用程式的目標版本
針對 ASP.NET 應用程式,確認並調整 web.config 的 <system.web><httpRuntime targetFramework>
元素,使用正確的 .NET Framework 版本,如 4.7.1
。
調整專案目標版本
- 在 Visual Studio 中進入專案的屬性頁。
- 在 [屬性] 視窗的左欄中,選擇 [應用程式] 索引標籤。
- 在 [目標 Framework] 清單中,選擇您要的版本。
.NET Core 預設就會使用 OS 的版本。
2008 Server 上啟用 TLS 1.2
- 安裝 KB3140245 更新,以支援 TLS 1.1 1.2。
- 新增或修改 Registry,加入 2 個項目。
安裝 KB3140245 更新
到這裡 https://www.catalog.update.microsoft.com/search.aspx?q=kb3140245
找到對應的作業系統平台版本做下載及安裝。安裝後要重開機。
新增或修改 Registry
設定步驟可看 [參考資料 5]
總之就是在以下 2 個鍵中設定兩個值: DisabledByDefault
= dword:0 及 Enabled
= dword:1。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
最簡單做法,是把以下內容存成 XXX.reg 如 TLS12.reg,再執行它就好了。1
2
3
4
5
6
7
8
9
10
11Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
無法昇級 .NET Framework
原則是,如果無法避免在程式中寫死通訊協定版本,建議就指定 TLS 1.2。
.NET 3.5 以下不支援 TLS,昇級是必要的。
安裝修補程式
如果是 .NET Framework 3.5,便需要安裝修補程式,使程式可以指定 TLS 1.2:可靠性彙總套件 HR-1605。依平台別有 KB3154518,KB3154519,KB3154520,KB3156421。
在 Windows Server 2008 R2 SP1 內建安裝的 .NET Framework 3.5.1 已套用了 KB3154518 TLS 1.2 的更新,不用另行安裝。
程式中指定 TLS 1.2
可在 Global.asax 或 Global.asax.cs 中增加以下內容:
加 import1
2Imports System.Security.Authentication
Imports System.Net
程式碼1
2
3
4
5public const SslProtocols _Tls12 = (SslProtocols)0x00000C00;
public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12;
// 以下可以加在 Application_Start() 中
ServicePointManager.SecurityProtocol = Tls12
只要在執行外部呼叫前完成設定即可。
以上,開工吧!
參考資料及圖片來源
- .NET Framework 的傳輸層安全性 (TLS) 最佳做法
- 如何:將 .NET Framework 的某個版本設定為目標
- 在 Windows 中的 WinHTTP 中的預設安全通訊協定為啟用 TLS 1.1 和 TLS 1.2 的更新
- KB3140245 下載
- How to enable TLS 1.2 on Windows Server 2008 R2
- Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1
- .NET Framework 3.5 and TLS 1.2