我需要记录所有HTTPS连接以测试我的客户端应用。如何配置SQUID以记录所有HTTPS流量网址?
访问日志中只有“CONNECT google.com:443 HTTP / 1.1”,但我获得了GET POST请求的完整网址。
如果有人能帮助我在SQUID3或ZED ATTACK PROXY中记录完整的请求标题,我将不胜感激?
ZAPROXY甚至不会让HTTPS通过。
答案 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的一些示例请求,看看具体的请求是什么样的。
GET /foo/bar/baz HTTP/1.1
User-Agent: curl/7.15.5
Host: example.com
Accept: */*
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。
在这里看不多,一切都是加密的,tcpdump
显示一个套接字被打开到example.com
但是这个交互的每一点都是加密的(为了保护隐私!)。
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>