我的C#程序使用哪个版本的TLS?

16

我在Visual Studio 2013中开发了一个与SOAP webservice通信的C#程序。我怎样才能知道我的程序使用哪个版本的TLS?


2
{btsdaf} - Evk
1
只需在ServicePointManager.SecurityProtocol上启用所有选项,你就可以开始了,对吗? - rene
{btsdaf} - jessehouwing
1
@MickyD 如果运行时不支持1.2版本,服务器将拒绝连接。 - Panagiotis Kanavos
1
{btsdaf} - Panagiotis Kanavos
显示剩余8条评论
3个回答

25

3
我喜欢测试我的程序的行为,而不仅仅依赖于文档。 - cja
4
我不理解对这个答案的鄙视。它使用经验证据并可推广到其他服务器类型。 - Jamie Ciocco

17

TLS 1.2在.NET 4.5中被添加。最早支持的.NET版本是4.5.2,因此如果您使用受支持的版本,就不会遇到任何问题。

.NET 4.6默认使用TLS 1.2。早期版本需要添加以下行以启用它:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | 
                                       SecurityProtocolType.Tls11;

TLS 1.0正在逐步淘汰,而SSL v3被认为已经不安全,因此它们不应该被添加。


你能提供一个证实.NET 4.6默认使用TLS 1.2的来源链接吗?我找不到任何官方的信息,并且看到其他评论者有所矛盾,例如:https://dev59.com/QFcP5IYBdhLWcg3wxMs5#47913910 - alksdjg
不要一开始就使用4.6版本,也不要试图硬编码版本号。只需在Google中搜索.NET TLS 1.2,第一个结果就是使用.NET Framework的传输层安全(TLS)最佳实践。在支持的操作系统上使用.NET 4.7,并让您的应用程序使用最好的可用TLS版本。即使4.6.2在TLS和程序集重定向方面也有些混乱。 - Panagiotis Kanavos
我不打算使用4.6版本。我只是想知道您从哪里得到了“4.6默认使用TLS 1.2”的信息,因为我无法在任何地方找到它。您是如何确认/证明的? - alksdjg
我已经发布了链接。3年前我回答了“How can I tell which version of TLS my program uses?”的问题,VS 2013不是答案。要在没有代码修改的情况下获得TLS 1.2,至少需要4.6版本。那时,我已经多次回答了那个问题,并且多年来都没有发表另一个完整的解释。在那时(就像SO中的许多常见问题一样),找到一个好的重复问题所需的时间比编写一个快速答案还要长。 - Panagiotis Kanavos
@alksdjg而且,终究实际的问题是作为对Oria答案的评论发布的:“由于我的生产Web服务调用正在与第三方服务通信,因此在进行.NET版本更改之前和之后,我需要额外的证明使用了哪种协议。” - Panagiotis Kanavos

5

{btsdaf} - Panagiotis Kanavos
4及以下版本需要通过热补丁来支持TLS 1.2。 - jessehouwing
1
{btsdaf} - Panagiotis Kanavos
感谢@Ori a!由于我的生产Web服务调用正在与第三方服务通信,因此在进行.NET版本更改之前和之后,我需要额外的证明使用了哪种协议。Wireshark使其非常明显且易于使用。 - mmcfly
当然,没问题 :-) - Ori a
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接