Dot-Net

.NET 4.5 中的預設安全協議

  • February 2, 2015

與支持高達的伺服器通信的預設安全協議是TLS 1.2什麼?預設情況下,選擇伺服器端支持的最高安全協議,或者我.NET必須明確添加這行程式碼:

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

除了程式碼更改之外,有沒有辦法更改此預設值?

最後,是否.NET 4.0只支持TLS 1.0? 即我必須將客戶端項目升級到 4.5 以支持TLS 1.2.

我的動機是刪除SSLv3對客戶端的支持,即使伺服器支持它(我已經有一個 powershell 腳本可以在機器系統資料庫中禁用它)並支持伺服器支持的最高 TLS 協議。

更新: 查看ServicePointManager課程中的我看不到and.NET 4.0的枚舉值。在兩者中,預設值為. 希望此預設設置不會因在系統資料庫中禁用而中斷。TLS 1.0``1.1``.NET 4.0/4.5``SecurityProtocolType.Tls|SecurityProtocolType.Ssl3``SSLv3

但是,我決定我必須將所有應用程序升級到.NET 4.5並明確添加SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;到所有應用程序的所有引導程式碼中。

這將使對各種 api 和服務的出站請求不會降級到SSLv3並且應該選擇最高級別的TLS.

這種方法聽起來合理還是矯枉過正?我有許多應用程序要更新,我想在未來證明它們,因為我聽說甚至TLS 1.0可能在不久的將來被某些提供商棄用。

作為向 API 發出出站請求的客戶端,在系統資料庫中禁用 SSL3 是否會對 .NET 框架產生影響?我看到預設情況下,TLS 1.1 和 1.2 未啟用,我們是否必須通過系統資料庫啟用它?重新<http://support.microsoft.com/kb/245030>。

經過一番調查,我相信系統資料庫設置不會有任何影響,因為它們適用於 IIS(伺服器子項)和瀏覽器(客戶端子項)。

抱歉,這篇文章變成了多個問題,然後是“也許”的答案。

一些對其他答案發表評論的人指出,設置System.Net.ServicePointManager.SecurityProtocol為特定值意味著您的應用程序將無法利用未來可能成為 .NET 更新中預設值的 TLS 版本。不要指定固定的協議列表,而是執行以下操作:

對於 .NET 4.7 或更高版本,不要設置System.Net.ServicePointManager.SecurityProtocol. 預設值 ( SecurityProtocolType.SystemDefault) 將允許作業系統使用它知道並配置的任何版本,包括在創建應用程序時可能不存在的任何新版本。

*對於早期版本的 .NET Framework,*您可以改為打開或關閉您知道和關心的協議,而讓其他任何協議保持原樣。

在不影響其他協議的情況下開啟 TLS 1.1 和 1.2:

System.Net.ServicePointManager.SecurityProtocol |= 
   SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

請注意使用|=來打開這些標誌而不關閉其他標誌。

在不影響其他協議的情況下關閉 SSL3:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;

引用自:https://stackoverflow.com/questions/28286086