TLS 透传

TLS透传是指负载均衡器或网关不解密TLS流量,而是直接将加密数据传送到后端服务器,由后端服务器进行解密和处理。

介绍

TLS 透传(TLS Passthrough)是代理服务器处理 TLS 请求的两种方式之一(另一种是 TLS 卸载)。在 TLS 透传模式下,代理不会解密来自客户端的 TLS 请求,而是将其传递到上游服务器进行解密,这就意味着数据在通过代理的时候保持加密的状态,以此来保证重要和敏感数据的安全性。

TLS 透传的优点

  • 由于数据不在代理上解密,而是以加密的方式转发到上游服务器,数据可以免受网络攻击。
  • 加密数据未经解密到达上游服务,确保了数据的机密性。
  • 这也是代理配置 TLS 的最简单方法。

TLS 透传的缺点

  • 流量中可能会恶意代码,这些代码将直接到达后端服务器。
  • 在 TLS 透传过程中,无法切换服务器。
  • 无法做 7 层流量处理。

前置条件

  • Pipy(版本 >= 0.90.3-2)
  • FGW Repo(版本 >= v1.0.0)
  • TLS 后端服务

TLS 的后端服务,本文档使用 https://httpbin.org 作为后端服务。

配置说明

在处理 TLS 透传时,配置非常简单。

  • TLSModeType:设置为 Passthrough。这种模式下FGW 不会终止 TLS 连接,而是将加密的流量直接传递给后端服务,这意味着后端服务必须能够处理 TLS 解密。

示例

{
  "TLS": {
    "TLSModeType": "Passthrough"
  }
}

配置

  1. 设置监听端口的协议,参考 监听端口配置文档,我们选择 TLS 作为端口的协议。
{
  "Listeners": [
    {
      "Protocol": "TLS",
      "Port": 8443,
      "TLS": {}
    }
  ]
}
  1. 作为使用 TLS 协议的端口,需要对其 TLS 进行配置。根据 TLS 配置文档,功能模式 TLSModeType 支持 TerminatePassthrough 两种类型。TerminateHTTPS 负载均衡 有使用,这里我们使用 Passthrough 类型。
{
  "TLS": {
    "TLSModeType": "Passthrough"
  }
}
  1. TLS 透传是工作在 L4 上,配置路由规则时使用 TLS 协议端口号 Passthrough 路由规则配置,键值分别为上游的域名地址(或域名地址 + 端口)。这里,我们使用配置 "httpbin.org": "httpbin.org"
{
  "RouteRules": {
    "8443": {
      "httpbin.org": "httpbin.org"
    }
  }
}
  1. 还有插件链的配置,我们选择用于 TLS 透传的插件链 TLSPassthrough
{
  "Chains": {
    "TLSPassthrough": [
      "tls/passthrough.js",
      "common/consumer.js"
    ]
  }
}
  1. 最终得到完整的配置。
{
  "Listeners": [
    {
      "Protocol": "TLS",
      "Port": 8443,
      "TLS": {
        "TLSModeType": "Passthrough"
      }
    }
  ],
  "RouteRules": {
    "8443": {
      "httpbin.org": "httpbin.org"
    }
  },
  "Chains": {
    "TLSPassthrough": [
      "tls/passthrough.js",
      "common/consumer.js"
    ]
  }
}

测试时,可以执行下面的命令向代理服务器发送请求。

curl https://httpbin.org/get --connect-to httpbin.org:443:127.0.0.1:8443

Feedback

Was this page helpful?