2011-06-14 70 views
11

我有一个通过https连接到Web服务的客户端应用程序。我需要“嗅探”web服务和客户端之间的所有网络流量,以检查一切是否正常,即我必须调试连接。如何调试ssl连接?

我已经试过Wireshark,但由于我没有服务器私钥,所以显示在wireshark屏幕上的数据当然是加密的。

当我无法访问服务器本身以及私钥和其他相关内容时,是否有办法在我的客户端和Web服务之间观察到ssl网络流量?

在此先感谢。

回答

4

看到这个:Debugging SSL communications

我知道理论上它可以做到 - 你可以设置一个与目标网络服务通信的代理,指向你的应用程序通过这个代理进行连接。它的一个已知的限制--Https假定您信任您的机器上安装的所有代理和证书。它的形式是Man-in-the-middle attack

看看Fiddler会有一定用处。

Man-in-the-middle attacks

在 中间人攻击,攻击者 拦截用户流量捕获 凭证和其他相关 信息。攻击者然后使用此信息使用 访问实际的 目标网络。在 进程中,攻击者通常将 作为代理/网关提供给用户一个虚假的SSL VPN站点;这 代理/网关通过任何 身份验证用户输入到 真正的目标网站。

+0

HTTP代理将无法让您看到它用于的HTTPS流量:它将所有内容直接转发到目标服务器。 (虽然你可以看到服务器的地址和端口。) – Bruno 2011-06-14 13:56:16

+0

@Bruno,一个普通的HTTP代理不会,但你可以有一个代理来做到这一点。有企业监控工具就是这样做的。它依赖于在您的计算机上添加可靠的证书,并且代理隐藏与HTTPS服务器的所有通信。 – YetAnotherUser 2011-06-14 14:01:57

+0

不,您不必信任HTTPS连接的HTTP代理以确保安全,只需要您计算机上的CA证书即可。一个HTTP代理不会拦截或修改一个HTTPS连接,它几乎不转发它,包括整个SSL/TLS交换(请参阅HTTP'CONNECT'方法)。 – Bruno 2011-06-14 14:03:53

0

如果您无法访问服务器的私钥,那么可以通过SSL/TLS来保护哪些内容没有多大用处。 (您至少会看到最初的握手。)

如果您对客户端有完全的控制权,您可以编写一个假的服务器,该服务器拥有您控制的私钥和证书,并且可以将所有由客户端发送到实际的服务器。为此,您需要让客户信任您自己的证书,因此您需要控制客户端。调整客户端上相应的hosts文件也可能更容易执行DNS欺骗,以便将正确的主机名连接转到您的假服务器。

4

你有没有安装python?

PIP安装mitmproxy

mitmproxy -p 1234

甚至video为您

(顺便说一句,我不得不apt-get的一个APT-后Debian的挤压安装python-LXML获取更新)

2

Burp Suite(甚至免费版)允许您设置一个SSL“代理”,它将为您的应用程序提供一个不同的证书,它将为您解密(并显示)流量。如果你想用localhost中的服务器进行测试,它也允许你设置代理(我在Windows和Wireshark中无法做到的事情)和Fiddler。