0

我在 Web 服务器前面有一个配置了客户端 https 加密的 F5 虚拟服务器。

我希望这个 VS 也可以管理 HTTP CONNECT 请求,以便客户端可以将它作为 Web 服务器或代理来请求。

也就是说,VS应该解密所有的TCP连接,但是如果第一个TCP包以“CONNECT”开头,它应该首先响应HTTP 200,然后等待下一个包(必须是“client hello”)并处理SSL 握手。

使用一些iRule当然可以,但是我不能轻易得到解决方案,而且我在互联网上找不到任何帮助,因为F5 doc没有打开。有没有人知道怎么做?

4

1 回答 1

1

我终于找到了解决方案。

VS 默认行为是从第一个 TCP 数据包开始处理 SSL 解密:所以必须查看第一个 TCP 数据包,如果它以 CONNECT 开头,

  • 禁用 SSL 解密,
  • 以 HTTP 200 响应,
  • 然后为应该紧随其后的“client hello”重新启用 SSL 解密

它适用于两种情况:

  • 在 TCP 上下文中,在 SSL 解密之前,检测 CONNECT 请求
  • 在 HTTP 上下文中,正确响应 CONNECT 请求

    当 CLIENT_ACCEPTED { # TCP CONTEXT
        TCP::collect 7 # 查看 TCP 流的前 7 个字节
    }
    当 CLIENT_DATA {
        if { [TCP::payload] starts_with "CONNECT" } {
            SSL::disable # 禁用 SSL 解密
        }
    }
    
    当 HTTP_REQUEST { # HTTP CONTEXT
        if { [HTTP::method] eq "CONNECT" } {
            HTTP::respond 200 # 发送 HTTP 200
            SSL::enable # 为下一个“client hello”重新启用 SSL 解密
        }
    }
    
于 2014-12-30T11:06:19.003 回答