我们有一个基于Windows的桌面厚客户端应用程序,前端构建在WPF+Telerik上,后端使用WCF Web服务进行通信。
现在通信正在SSL3.0 上进行
由于SSL3.0最近的安全问题,已决定在服务器端使用TLS 1.2或TLS 1.1,以强制所有通信仅通过TLS进行。
我们已经尝试使用Fiddler和Wireshark来验证底层Web服务通信。我们可以看到,200个"隧道到"请求是通过TLS进行的。
但是有没有其他方法可以交叉检查ThickClient应用程序是否在WebService请求中显式和隐式使用TLS
Windows已在2014年12月15日Windows Update中推出TLS修补程序,Windows 2008 R2应用服务器上也安装了该修补程序。SSL3.0尚未作为后备选项禁用,但明确表示TLS未启用。但微软知识库的文章称TLS将优先(TLS1.2>TLS1.1>TLS1.0>SSL3.0)
安全更新(知识库文章KB2992611,随后是另一个更新KB3018238)于2014年12月9日推送,并于2014年11月15日通过HP Monthly Patching安装
有关安全修补程序及其影响的更多详细信息,请查看以下链接。Microsoft对SSLv3.0漏洞补丁的官方更新https://support2.microsoft.com/kb/2992611/en-us链接2:technet.microsoft.com/en-us/library/security/m14-66.aspx
有关支持TLS的详细信息链接3:blogs.msdn.com/b/kaushal/archive/2011/10/02/support-for-sl-tls-protocols-on-windows.aspx
初始修补程序KB2992611发现的问题,并通过KB3018238立即修复Link4 infoworld.com/article/2848574/operating-systems/microsoft-batches-kb-2992611-schannel-patch-tls-alert-code-40-slow-sql-server-block-iis-sites.html
如果您的意图是测试服务器上是否启用了TLS/是否可以协商,那么您可以用TcpClient
和SSLStream
编写一些探测代码来强制协商TLS,并查看它是否真的协商过。参见:
-
请参阅中的
SendMessageToServer
https://www.simple-talk.com/dotnet/.net-framework/tlsssl-and-.net-framework-4.0/ -
如何创建使用Ssl3而不是Tls的SSLStream(将其更改为强制Tls)
如果您想阻止任何.NET代码发出的所有"https"请求的SSL回退,请使用以下方法进行设置:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
注意:将其应用于AppDomain
,因此会影响在同一AppDomain中执行的任何HttpWebRequests
。
-
如何在.NET中禁用SSL回退并仅对出站连接使用TLS?(贵宾犬缓解)
-
设置ServicePointManager.SecurityProtocol 的每个请求值
-
根据请求在.net HttpWebRequest上设置SecurityProtocol(Ssl3或TLS)
如果您想对用于与服务器通信的WCF通道堆栈进行更明确/高级的控制(这样您就可以强制只使用TLS传输级别的安全性),那么您可以编写自己的StreamUpgradeProvider
。
(我"认为"你应该通过使用TcpClient
和SSlStream
来建立自己的使用TLS的Stream
……然后你会升级通道以使用它……(这可能是错误的)。。。。或者你用SSlStream
)包装升级中给你的Stream
- https://msdn.microsoft.com/en-us/library/vstudio/aa738692(v=vs.100).aspx
- http://blogs.msdn.com/b/drnick/archive/2006/09/27/rot-128-stream-upgrade-sample_2c00_-part-1.aspx