我有一个Windows窗体应用程序,可通过单击一次部署。该应用程序是使用.net 4.7.2构建的,它使用HttpClient API来访问其他两个Web服务,这些Web服务托管在内部服务器上。如您所料,只能通过HTTPS访问服务,并且服务器配置为支持所有TLS版本(顺便说一句,这是2016 Windows服务器)。
Intranet客户端应用程序(即Windows窗体应用程序)已部署在多个内部子网中,并且除了一台PC(属于特定子网,这是唯一正在使用的PC)外,其他所有设备都运行良好这个特定的应用)。仅当HttpClient配置为使用TLS 1.1时,此PC才能使用服务。
由于我们使用的是内部证书(我们的AD具有内部证书颁发机构),因此我已经检查过,并且具有实体公钥的证书已经存在于计算机的受信任证书颁发机构容器中,无法通过TLS 1.2建立安全会话。
PC正在运行Windows 10 Pro(最新版本),因此它应支持TLS 1.2。我尝试模拟Fiddler的请求,事实是,我只有在configure it使用TLS 1.1时才能得到结果。
没有将协议设置为TLS 1.1,我可以看到Fiddler表示尚未建立握手,并且永远不会“执行”服务。
现在,根据我所读的内容,我应该不会在代码方面遇到任何问题。实际上,我不必指定TLS版本(Windows 10 Pro似乎已对TLS 1.2开箱即用,这应该是Windows 10的默认设置。由于我使用的是.NET 4.7.2,它应该会自动使用系统的默认协议),但事实是,只有使用tls 1.1(而不是tls 1.2!)才能建立安全通道。
我尝试在其他计算机上运行代码,并且一切都按预期进行(我可以使用tls 1.1或tls 1.2建立安全通道,甚至可以使用系统的默认协议)。
由于我不是真正的网络专家,所以有人能指出我正确的方向吗?你们认为这可能是由防火墙引起的吗?有任何想法吗?
我的意思是,看来PC可以识别HTTPS会话中使用的证书(如果不是这种情况,那么我将无法使用TLS 1.1,对吗?),但是似乎其中有些东西不会让我使用TLS 1.2的方式...
谢谢。 路易斯
答案 0 :(得分:0)
查看TLS的官方指南:https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
如果是一台计算机的问题,我建议创建一个执行简单请求的简单HelloWorld应用,以相同的.NET Framework(4.7.2)为目标,然后在特定计算机与其他计算机上进行测试。这样可以肯定地告诉您问题出在您的应用程序还是机器/网络设置中。