我的一位客户在操作系统级关闭了TLS 1.0。之后,与我们的产品的连接不再起作用。客户没有使用.NET 4.6.1的最新版本。
由于我们没有指定使用的协议,因此我们依赖于默认值。根据{{3}} .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是不可能的。
答案 0 :(得分:2)
SecurityProtocol
- 属性影响入站或出站连接,则会在评论中发出错误信息。
经过一些研究后,我发现帖子How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)有评论可以回答这个问题:
如果您要从.NET代码启动出站连接,只需要设置 System.Net.ServicePointManager.SecurityProtocol,例如从服务器上运行的自定义代码连接到Web服务或API。如果您只运行一个简单的网站,并且只接受来自浏览器的传入连接,那么注册表修复就足够了。