最近項目改造https,有部分請求出現“請求被中止: 未能創建 SSL/TLS 安全通道”。
原因應該是,接口方變更了安全協議,而客戶端並未啟用該協議。
解決辦法自然就是:讓客戶端啟用該協議。具體就是在發起網絡請求之前確保ServicePointManager.SecurityProtocol中含有服務端所用的安全協議,如果不知道或希望客戶端健壯一點,當然最簡單的方式就是把所有可用的協議都啟用,隨你服務端將來怎么換。代碼如下:
if (url.ToLower().StartsWith("https")) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12; }
上線后,發現部分接口請求還是會出現上面問題。
經過分析發現,
1.都是同一套架構,不會存在配置或其他問題。
2.接口有時可以有時不可以(初步懷疑有節點沒部署上)
3.分析日志發現大部分都是請求時間長的接口返回的。
結論:
如果請求超時
http請求,會返回——> GatewayTimeout
https請求會返回——> 請求被中止: 未能創建 SSL/TLS 安全通道。
