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"
}
}
配置
- 设置监听端口的协议,参考 监听端口配置文档,我们选择
TLS
作为端口的协议。
{
"Listeners": [
{
"Protocol": "TLS",
"Port": 8443,
"TLS": {}
}
]
}
- 作为使用 TLS 协议的端口,需要对其 TLS 进行配置。根据 TLS 配置文档,功能模式
TLSModeType
支持Terminate
和Passthrough
两种类型。Terminate
在 HTTPS 负载均衡 有使用,这里我们使用Passthrough
类型。
{
"TLS": {
"TLSModeType": "Passthrough"
}
}
- TLS 透传是工作在 L4 上,配置路由规则时使用 TLS 协议端口号 Passthrough 路由规则配置,键值分别为上游的域名地址(或域名地址 + 端口)。这里,我们使用配置
"httpbin.org": "httpbin.org"
。
{
"RouteRules": {
"8443": {
"httpbin.org": "httpbin.org"
}
}
}
- 还有插件链的配置,我们选择用于 TLS 透传的插件链
TLSPassthrough
。
{
"Chains": {
"TLSPassthrough": [
"tls/passthrough.js",
"common/consumer.js"
]
}
}
- 最终得到完整的配置。
{
"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?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 November 29, 2023: add docs for fault injection and request mirror, fix typo (b53e400)