我有一个网站(来自客户端)在我的Win 2008 R2 Standard服务器上点击WCF服务。 WCF服务托管在IIS 7.5上。连接是HTTPS加密的。我无法访问客户端的服务器。
为了调试问题,我需要检查客户端发送的请求。我正在使用WireShark 1.10.3。为了这。我能够获得解密信息,我首先运行WireShark,并使用Full Handshake连接2台服务器。如果服务器使用Abbreivated Handshake,则WireShark无法解密。
简化握手采用称为SSL会话重用的技术,其中两个服务器将加密/解密信息存储在缓存中。这消除了完全握手所需的步骤,并在未来的请求中节省了CPU。我读到这个缓存的默认TTL是10个小时,但我还没有找到设置它的位置。当任一服务器缓存中没有信息时,TLS by specification执行完全握手。在Full Handshake之后,它会自动缓存信息,以便它可以进行缩位握手。
由于我正在调试,我必须多次运行多个场景。
我发现确保两台服务器进行完全握手的唯一方法是重启我的服务器。这将清除缓存和会话信息,并强制服务器进行完全握手。
显然,每次重新启动我的服务器我都会回来测试这个问题并不理想。我做了一些研究,发现一些文章建议我可以通过将注册表项HKLM \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ ClientCacheTime \ Value设置为0来禁用SSL会话重用。
http://blogs.msdn.com/b/huizhu/archive/2009/12/17/ssl-_2f00_tls-full-handshake-vs.-abbreviated-handshake.aspx http://support.microsoft.com/kb/247658
文章建议这将禁用加密信息的缓存。然而,这对我没用。我错过了什么吗?
是否有其他方法可以禁用SSL会话重用或无需重启的方法来破坏缓存?
答案 0 :(得分:0)
以下是一些想法:
1)让客户端清除会话缓存,如果这可能并且比重新启动服务器更容易。
2)通过HTTPS代理(例如,burpsuite)发送请求。这很可能需要配置客户端以使用您的代理。重新启动或清除代理缓存会导致完整的TLS握手。
3)使用TLS反向代理接收服务器IP和端口上的传入请求,并将它们转发到服务器。客户端不需要代理配置。只需重新启动代理即可启动完整握手。如果服务器需要HTTPS,请在代理上使用上游SSL。如果服务器可以使用HTTP,您可以在代理和服务器之间清除流量,并使用Wireshark直接查看流量。这可能会有所帮助:https://serverfault.com/questions/583374/configure-nginx-as-reverse-proxy-with-upstream-ssl
4)在客户端和服务器之间的现有TLS连接上翻转或丢弃数据包。这将导致致命警报(完整性检查失败,指示可能的MITM攻击),这将使该会话无效并要求下一个请求启动完全握手。