我有一个场景,其中TcpListner充当客户端和服务器之间的代理。代理需要记录所有互联网流量。 SSL加密所有的HTML内容。
我可以从流中获取密钥来解密SSL内容吗? 如果没有,我可以充当SSL服务器。但是切入点在哪里?当。。。的时候 服务器告诉客户端使用ssl?我甚至看不到html文本只是标题 通过将服务器的流编码为ASCII。
答案 0 :(得分:2)
SSL旨在抵御中间人攻击,因此您将无法提取密钥来解密流量。如果您的应用程序充当代理,您可能会收到的唯一明文是最初的CONNECT
请求。
一种选择是执行许多商业防火墙所做的事情以允许SSL检查,即模拟与客户端的连接的远程端,为每个防火墙建立单独的SSL流。要做到这一点,您需要做很多事情,如果您能够在将要使用的所有客户端上安装您自己的受信任根证书,它将 仅 工作您的代理(例如,使用Windows组策略)。如果你不能做到这一点,你也可以放弃,因为它使你有意做的事情变得有效。
CONNECT
请求确定客户端连接到的服务器的名称。SslStream
打包连接并调用AuthenticateAsClient(...)
。SslStream
,包装客户端的传入网络流,并使用步骤2中生成的证书调用AuthenticateAsServer()
。答案 1 :(得分:1)
从您的问题来看,您似乎有一个客户端,中间的代理服务器和服务器。客户端和服务器正在使用SSL进行通信,并且您希望代理在客户端和服务器之间解密SSL加密的消息。
那么,第一个问题是你的服务器吗?如果没有,那么这正是SSL应该阻止的。下次你用信用卡在互联网上买东西的时候,想一想你的ISP可能会做什么,如果你问的是可能的 - 他们可以在你和网上商店之间设置代理并解密你的信用卡号码,你就是'我永远不会知道。
答案 2 :(得分:0)