2012-07-31 126 views
1

我有一个场景,TcpListner充当客户端和服务器之间的代理。代理需要记录所有的互联网流量。 SSL加密所有的HTML内容。HTTPS解码,SSL解密

我可以从流中获取密钥来解密SSL内容吗? 如果不是,我可以充当SSL服务器。但入口在哪里?当 服务器告诉客户端使用ssl?我甚至无法通过将来自服务器的流编码为ASCII来查看标题为 的html文本。

+1

这是很清楚你想要做什么。 – CodesInChaos 2012-07-31 12:40:44

+0

你能给我们一个你想要做什么,你写了什么代码的例子。此外,尚不清楚您是否尝试*强制* SSL,或仅在使用SSL编码页面时解析它。 – 2012-07-31 12:42:37

+2

这是ssl缓解的东西。 – 2012-07-31 12:43:38

回答

2

SSL旨在反对人在这方面的中间人攻击的安全,因此你将无法提取密钥来解密流量。如果您的应用程序充当代理,您可能会收到的唯一明文将是最初的CONNECT请求。

一种选择是做一些商业的防火墙做允许SSL检查,这是冒充的连接到客户端的远程端,建立一个单独的SSL流中的每个。要做到这一点,你需要做一些事情,这将工作,如果你能在将使用代理的所有客户端上安装自己的受信任的根证书(例如使用Windows组策略)。如果你不能做到这一点,那么你可能会放弃,因为它会让你试图做的事情变得不可能。

  1. 确定客户端从CONNECT请求连接到的服务器的名称。
  2. 生成一个证书,并将CN设置为在步骤1中建立的服务器名称,并由客户端信任的根证书签名。
  3. 建立网络连接到目的主机,并使用.NET SslStream包裹连接和调用AuthenticateAsClient(...)
  4. 再次使用SslStream,包裹客户机的传入网络流,并使用在步骤2中产生
  5. 在两个连接之间转发数据的证书,记录它,你需要拨打AuthenticateAsServer()
0

可以只有如果你有私钥解密SSL数据包。如果您想检查或登录互联网流量,请查看wireshark,或者通过fiddler了解HTTPS解密的实际方法。

1

从你的问题来看,你似乎有一个客户,一个中间代理和一个服务器。客户端和服务器使用SSL进行通信,并且您希望代理解密客户端和服务器之间的SSL加密消息。

然后第一个问题是你的服务器?如果没有,那么这正是SSL应该防止的。下一次你用信用卡在互联网上买东西的时候,想想你的ISP可以做些什么,如果你问的是可能的话 - 他们可以在你和网上商店之间建立代理并解密你的信用卡号码,我从来不知道。