1. 程式人生 > 實用技巧 >c# – 因為演算法不同,客戶端和伺服器無法通訊

c# – 因為演算法不同,客戶端和伺服器無法通訊

  今天使用測試APP和伺服器端進行資料互動時,死活過不去,檢視異常資訊提示:“因為演算法不同,客戶端和伺服器無法通訊”。 最後通過道友的一篇文章找到了解決方案,在此記錄一下。

原因可能是Http請求的安全協議不同導致的,伺服器的系統是windows Server 2016 Datacenter. 配置了https協議證書,支援TLZ1.2,TLZ1.1等安全傳輸。 而app的介面程式碼是.net framework 4.5且再發送http請求時未指定協議版本,預設傳送的協議頭應該是沒有啟用安全協議(.net4.5所支援的最低tlz安全版本,最高為TLZ1.2)。 那麼如果伺服器端設定了安全標準,要求TLZ1.2,那麼想讓程式按照最高安全協議TLZ1.2傳輸資料的話,是需要手動指定的。

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

// 或者

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

參考文章:

c# – 客戶端和伺服器無法通訊,因為它們在Windows Server 2008 Web上沒有通用演算法

關於安全性:.NET 4.5中的預設安全協議