我有一个windows窗体应用程序,这是通过点击一次部署。该应用程序是使用.net 4.7.2构建的,它使用HttpClient应用程序接口来访问托管在内部服务器上的几个rest web服务。如你所料,服务只能通过HTTPS访问,服务器配置为支持所有TLS版本(顺便说一句,这是2016年的windows服务器)。
intranet客户端应用程序(即windows forms应用程序)部署在多个内部子网中,除了一台PC (它属于特定的子网-它是唯一使用此特定应用程序的PC )之外,一切都运行良好。仅当HttpClient配置为使用TLS 1.1时,此PC才能使用服务。
因为我们使用的是内部证书(我们有一个用于AD的内部证书颁发机构),所以我已经检查过了,并且带有实体公钥的证书已经存在于计算机的受信任证书颁发机构容器中,其中无法通过TLS 1.2建立安全会话。
PC运行的是Windows 10专业版(最新版本),因此应支持TLS 1.2。我已经尝试模拟来自Fiddler的请求,事实是,只有当我configure it使用TLS1.1时,我才会得到结果。
在没有将协议设置为TLS1.1的情况下,我可以看到Fiddler说握手还没有建立,服务永远不会“执行”。
现在,根据我所读到的,我不应该在代码上遇到任何问题。事实上,我不应该指定TLS1.2的版本(看起来Windows10Pro对TLS1.2有开箱即用的支持,这应该是Windows 10的默认版本。由于我使用的是.NET 4.7.2,它应该自动使用系统的默认协议),但事实是只使用TLS1.1(而不是TLS1.2!)允许建立安全通道。
我已经尝试在其他机器上运行代码,并且一切正常(我可以使用TLS1.1或TLS1.2建立安全通道,甚至让它使用系统的默认协议)。
既然我不是一个真正的网络爱好者,有人能给我指个方向吗?你们认为这可能是防火墙造成的吗?有什么想法吗?
我的意思是,看起来PC可以识别HTTPS会话中使用的证书(如果不是这样的话,我就不能使用TLS 1.1了,对吧?),但似乎有一些东西阻碍了我使用TLS 1.2……
谢谢。路易斯
发布于 2018-10-09 06:35:49
查看我们关于TLS的官方指南:https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls
如果是一台机器的问题,我建议创建一个简单的HelloWorld应用程序来执行简单的请求,目标是相同的.NET框架(4.7.2),然后在特定的机器上与其他机器进行测试。这将告诉你问题是在你的应用程序中还是在机器/网络设置中。
https://stackoverflow.com/questions/52614416
复制相似问题