强制 HttpWebRequest 和 ClientWebSocket 使用 TLS 1.2

Posted

技术标签:

【中文标题】强制 HttpWebRequest 和 ClientWebSocket 使用 TLS 1.2【英文标题】:Force HttpWebRequest and ClientWebSocket to use TLS 1.2 【发布时间】:2019-04-15 06:55:28 【问题描述】:

我正在尝试使用 ClientWebSocket 类连接到 websocket。我正在使用 Unity 2017.4.10。不幸的是,C#/Mono 总是使用 TLS 1.0,但由于某种原因失败了。当我检查与 Wireshark 的连接时,我收到一个加密的警报数据包并且连接关闭。

我已经尝试通过设置来强制使用 TLS 1.2:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

但 WebSocket 仍会尝试与 TLS 1.0 连接。

当连接到 wss://echo.websocket.org 时它可以工作,因为 websocket.org 只支持 TLS 1.2。不幸的是,我的提供商仍然支持 TLS 1.0 1.1 和 1.2。 无论我尝试什么,HttpWebRequestClientWebSocket 类始终使用 TLS 1.0。

我知道使用了 TLS 1.0,因为 Wireshark 和 Fiddler 这么说。

【问题讨论】:

【参考方案1】:

看起来这是一个统一错误并在 2018.2 中修复

Issue

【讨论】:

【参考方案2】:

对于 Websocket 尝试: WebSocketClient.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;

【讨论】:

欢迎来到 SO!请解释您的答案并相应地格式化。

以上是关于强制 HttpWebRequest 和 ClientWebSocket 使用 TLS 1.2的主要内容,如果未能解决你的问题,请参考以下文章

打字稿 - 强制值成为接口的属性

webrequest 和 httpwebrequest 有啥区别

.NET 中的 WebClient 和 HTTPWebRequest 类有啥区别?

页面重定向时 HttpWebRequest 和 Restsharp 不返回响应

WebClient、HttpWebRequest 和 HttpClient 的最大并发请求数

HttpWebRequest 和原生 GZip 压缩