Squid TLS 握手流程

Squid程序流程

ACL简单配置(访问控制列表)

更多资料参考:https://subscription.packtpub.com/book/networking_and_servers/9781849513906

ssl_bump 侦听https connect 实现url过滤

在 Squid 服务中配置 SSL Bumping (kaspersky.com)

前因

HTTP通信,在Squid中可以正常识别method和详细urlpath,但是HTTPS通信时,method一律识别成CONNECT,并且只显示domain,不显示详细urlpath;所以,有关url_regex和urlpath_regex的过滤都无法生效。如果想让squid能获取详细urlpath和method的话就需要把Squid设置成一个中间人。
参考:
https://support.kaspersky.com/kwts/6.1/zh-Hans/166244.htm
https://blog.csdn.net/ken6328/article/details/105730333
https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit#Features.2FDynamicSslCert.Create_Self-Signed_Root_CA_Certificate
https://blog.csdn.net/zcmain/article/details/98737243

TLS握手过程

源码流程

参考

https://wiki.squid-cache.org/Features/SslPeekAndSplice
https://www.jianshu.com/p/71c43aa7438f

SSL bump

如果在http_port上收到 CONNECT 请求(或在https_port截获新连接),前提是该端口配置了 ssl-bump 标志,则将参考此选项。连接上的后续数据要么被视为HTTPS并解密,要么在TCP级别通过隧道而不解密,具体取决于第一个匹配的碰撞"操作"。
关键词

Bump:

当使用sslbump1,优先和客户端建立安全连接,然后连到服务器。使用sslbump2时,与服务器建立安全连接,并使用模拟的服务器证书与客户端建立安全连接。

Splice:

成为TCP隧道,而不解密代理流量。

Peek:

接收客户端(步骤 SslBump1)或服务器(步骤 SslBump2)证书,同时保留slice连接的可能性。服务器证书在peek时(在步骤 2 期间)通常可防止在步骤 3 中出现的bump连接。

Stare:

接收客户端(步骤 SslBump1)或服务器(步骤 SslBump2)证书,同时保留连接bump的可能性。服务器证书在stare时(在step 2 期间)通常会排除在step 3 中的splice连接。

Terminate:

关闭客户端和服务器连接。

步骤 SslBump1 中可用的向后兼容性操作:

Client-first:

Bump连接。首先与客户端建立安全连接,然后连接到服务器。此旧模式不允许 Squid 模拟服务器 SSL 证书,并且不适用于截获的 SSL 连接。

Server-first:

Bump连接。首先与服务器建立安全连接,然后使用模拟的服务器证书与客户端建立安全连接。适用于 CONNECT 请求和截获的 SSL 连接,但不允许根据 SSL 握手信息做出决策。

Peek-and-splice

Peek and splice 根据客户端到squid和服务器到squid 的 SSL hello消息决定是bump还是splice连接。
配置实例如下:

Bump步骤:

step1:

1.   从客户端获取 TCP 级别的信息。
  -  在转发代理环境中,还要分析 CONNECT 请求。
  -  在拦截环境中,使用 TCP 级别信息创建虚假的 CONNECT 请求。
  1. 使用上面提到的 CONNECT 请求完成标注序列。
  2. 评估所有ssl_bump规则并执行第一个匹配操作(splice、bump、peek、stare或terminate)。
    step 1 是始终执行的唯一步骤。*

Step2:

 1. 从客户端获取 TLS 客户端 Hello 信息,包括 SNI(如果可用)。调整步骤 1 中的 CONNECT 请求以反映 SNI。
 2. 使用上面提到的调整后的 CONNECT 请求完成标注序列。
 3. 再次评估所有ssl_bump规则并执行第一个匹配操作(splice、bump、peek、stare或terminate)。
  - 此步骤在peek时通常使第3步的bump变得不可能。
  -   此步骤在stare时通常使步骤3的splice是不可能的。

仅当在上一步中匹配了peek或stare规则时,才会执行step 2。
如果此步骤是最终步骤(即,没有步骤 3),则调整后的 CONNECT 请求将在此步骤录入access.log。但是,在splice时,调整后的 CONNECT 将连接到生成的隧道,并且在关闭该隧道之前不会记录。

step3:

1. 从服务器获取 TLS 服务器hello信息,包括服务器证书。
2. 验证 TLS 服务器证书。
3. 再次评估所有ssl_bump规则,并对连接执行第一个匹配操作(splice、bump或terminate)。

仅当在上一步中匹配peek或stare规则时,才会执行步骤 3。
在此步骤中,调整后的 CONNECT 请求始终录入access.log(当然,如果 Squid 进入此步骤)。但是,在splice时,调整后的 CONNECT 将连接到生成的隧道,并且在关闭该隧道之前不会记录。
在大多数情况下,步骤 3 中唯一有意义的选择是是否终止连接。splice和bump的决定通常由peek或stare前一步决定。
Squid 配置必须平衡获取更多信息的愿望(通过延迟最终操作)和执行某个最终操作(有时不能再延迟)的要求。

建立链接到优先级

posted @   心亘久  阅读(561)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示