【问题标题】:Squid access log not logging CONNECT full urlsSquid 访问日志未记录 CONNECT 完整 url
【发布时间】:2014-04-09 22:28:53
【问题描述】:

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

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

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

ZAPROXY 甚至不让 HTTPS 网址通过。

【问题讨论】:

  • 我推荐阅读这本书:Squid Proxy Server 3.1 初学者指南

标签: squid


【解决方案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 只是通过加密的流量,无法看到更深的内容。

因此,当 squid 记录这些请求时,它会为您提供它所拥有的一切,使用 HTTP 它能够看到完整路径,因此它会记录完整路径,使用 HTTPS 它只有主机和端口,所以它记录的就是这些。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 太棒了!但是您能否更具体地说明如何正确处理?
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多