【发布时间】:2018-02-06 12:07:56
【问题描述】:
我的一位客户在操作系统级别关闭了 TLS 1.0。之后与我们产品的连接不再起作用。客户没有使用 .NET 4.6.1 的最新版本。
由于我们没有指定使用的协议,我们依赖于默认值。根据https://support.microsoft.com/en-us/help/3069494/cannot-connect-to-a-server-by-using-the-servicepointmanager-or-sslstre.NET 4.6 默认启用 TLS 1.2,这将是完美的,也是我们想要的。
我想尝试一些配置,以便更好地理解。我指定仅在代码级别允许 TLS 1.0:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
为了测试握手,我使用了 openssl。它应该与 TLS 1.0 完美配合。但令我惊讶的是,握手也适用于 TLS 1.2。
$ openssl s_client -connect localhost:30050 -tls1_2
<..snip..>
SSL-Session:
Protocol : TLSv1.2
<..snip..>
我正在监督一些 .NET 或 TLS 规则吗?据我了解,当将 TLS 1.0 指定为唯一协议时,TLS 1.2 应该是不可能的。
【问题讨论】:
-
您如何/在哪里使用该代码?你的服务器是什么?
-
如果在协商过程中可以升级,允许升级似乎是明智的,该属性状态的文档 您的代码不应隐含地依赖于使用特定的保护级别,或者假设默认使用给定的安全级别
-
@CamiloTerevinto 我在控制台中托管 WCF 服务。
-
设置
SecurityProtocol是否影响入站 或出站 http 连接? -
@mjwills 我认为你成功了。根据stackoverflow.com/questions/26389899/… 中的评论:如果您从 .NET 代码启动出站连接,则只需设置 System.Net.ServicePointManager.SecurityProtocol,例如从服务器上运行的自定义代码连接到 Web 服务或 API。如果您只运行一个简单的网站,并且只接受来自浏览器的传入连接,那么注册表修复就足够了。
标签: c# .net ssl cryptography tls1.2