HTTPS解码,SSL解密

时间:2012-07-31 12:38:08

标签: c# ssl https

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

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

3 个答案:

答案 0 :(得分:2)

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

一种选择是执行许多商业防火墙所做的事情以允许SSL检查,即模拟与客户端的连接的远程端,为每个防火墙建立单独的SSL流。要做到这一点,您需要做很多事情,如果您能够在将要使用的所有客户端上安装您自己的受信任根证书,它将 工作您的代理(例如,使用Windows组策略)。如果你不能做到这一点,你也可以放弃,因为它使你有意做的事情变得有效。

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

答案 1 :(得分:1)

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

那么,第一个问题是你的服务器吗?如果没有,那么这正是SSL应该阻止的。下次你用信用卡在互联网上买东西的时候,想一想你的ISP可能会做什么,如果你问的是可能的 - 他们可以在你和网上商店之间设置代理并解密你的信用卡号码,你就是'我永远不会知道。

答案 2 :(得分:0)

如果您拥有私钥,则只能 解密SSL数据包。如果您想检查或记录互联网流量,请查看wireshark,或fiddler了解HTTPS解密的实用方法。