Squid访问日志没有记录CONNECT完整的URL

时间:2014-03-07 00:05:35

标签: squid

我需要记录所有HTTPS连接以测试我的客户端应用。如何配置SQUID以记录所有HTTPS流量网址?

访问日志中只有“CONNECT google.com:443 HTTP / 1.1”,但我获得了GET POST请求的完整网址。

如果有人能帮助我在SQUID3或ZED ATTACK PROXY中记录完整的请求标题,我将不胜感激?

ZAPROXY甚至不会让HTTPS通过。

2 个答案:

答案 0 :(得分:2)

您必须将Squid作为SSL网关运行,以便完全记录传递的流量。如果要捕获线路上的流量,您就会明白为什么只能在日志中获取有限的信息。

答案 1 :(得分:1)

Squid没有记录完整的URL,因为squid无法知道完整的URL。

squid完全不同地处理HTTP和HTTPS请求。对于HTTP请求,squid的行为大多类似于HTTP服务器,但是对于HTTPS请求,squid只是设置了一个带有远程服务器的套接字,客户端中的补丁和步骤。

如果squid试图直接与远程服务器对话并将连接传递给客户端,那么它本质上就是在尝试执行中间人攻击。

让我们看看http://example.com/foo/bar/baz的一些示例请求,看看具体的请求是什么样的。

直接http请求

GET /foo/bar/baz HTTP/1.1
User-Agent: curl/7.15.5
Host: example.com
Accept: */*

从squid看到的Http请求

GET example.com/foo/bar/baz HTTP/1.1
User-Agent: curl/7.15.5
Host: example.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive

正如您所看到的,HTTP请求几乎相同,只有几个额外的标头,最值得注意的是,GET行请求完整的URI。

直接https请求

在这里看不多,一切都是加密的,tcpdump显示一个套接字被打开到example.com但是这个交互的每一点都是加密的(为了保护隐私!)。

从squid看到的Https请求

CONNECT example.com:443 HTTP/1.0
Host: example.com:443
User-Agent: curl/7.15.5
Proxy-Connection: Keep-Alive

当squid收到该请求时,它拥有它需要知道的所有内容,然后它可以打开一个套接字到所请求的服务器,此时客户端和服务器执行TLS握手并最终开始说正常的HTTP(就像第一个例子),鱿鱼只是通过加密的流量,无法看到任何更深的。

因此,当squid记录这些请求时,它会为您提供它所拥有的一切,通过HTTP,它能够看到完整路径,因此它记录了完整路径,而HTTPS只有主机和端口,因此它就是记录的内容。 / p>