# TLS 终止是什么？定义、例子与常见误区

> TLS 终止是指网络路径上客户端 TLS 连接结束并被解密的位置，可以是 CDN 边缘、负载均衡、反向代理，也可以是应用服务器本身。

Source: https://ssl.sh/zh/glossary/tls-termination/
Last updated: 2026-11-10

TLS 终止回答的是“客户端的加密连接在哪里结束”。负责终止 TLS 的组件持有证书和[私钥](https://ssl.sh/zh/glossary/private-key/)，完成握手，此后看到的就是明文请求。常见的终止点有 CDN 边缘节点、云负载均衡（如各家云厂商的 SLB/CLB）、Kubernetes Ingress 控制器、Nginx 等[反向代理](https://ssl.sh/zh/glossary/reverse-proxy/)，或应用服务器自己。终止点之后，流量可能以明文传到后端，也可能重新建立一条 TLS 连接再加密；代理也可以不终止，直接把加密流量透传给后端（TLS 透传）。

## 为什么重要
终止点就是你的安全边界。浏览器的锁形图标只说明到终止组件这一段是加密且经过认证的，之后如何完全取决于你的架构；运营这个组件的一方，比如 CDN 服务商，能看到明文流量。终止点的选择还决定了：证书要装在哪里、在哪里续签，[mTLS](https://ssl.sh/zh/glossary/mtls/) 客户端证书能在哪里校验，以及后端会丢失哪些信息。终止之后，后端看不到客户端的 TLS 细节和真实 IP，除非代理通过 `X-Forwarded-For`、`X-Forwarded-Proto` 等请求头或 PROXY 协议转交。

## 例子
用 Nginx 的 stream 模块做 TLS 透传，按 [SNI](https://ssl.sh/zh/glossary/sni/) 分流而不解密：

```nginx
stream {
    map $ssl_preread_server_name $backend {
        app.example.com  10.0.0.11:443;
        default          10.0.0.12:443;
    }
    server {
        listen 443;
        ssl_preread on;
        proxy_pass $backend;
    }
}
```

这时 TLS 在后端终止，证书要装在后端。改用带 `ssl_certificate` 的 `http` server 块，终止点就移到了 Nginx。

## 常见误区
- **有锁形图标就说明一路加密到应用。** 它只覆盖到终止点为止的那一段。
- **TLS 必须在应用服务器上终止才安全。** 在代理上终止是常规做法，关键在于保护代理之后那一段，可以重新加密，也可以做网络隔离。
- **透传模式的代理也能加请求头、做缓存。** 不解密就只能看到 SNI 和加密后的字节。

## 相关术语

- [SSL 卸载](https://ssl.sh/zh/glossary/ssl-offloading/): SSL 卸载是把 TLS 握手和加解密的计算工作从应用服务器转移到专门的代理、负载均衡或硬件设备上。
- [反向代理](https://ssl.sh/zh/glossary/reverse-proxy/): 反向代理是代表后端服务器接收客户端连接、再把请求转发给后端的服务器，通常同时承担 TLS 终止。
- [mTLS](https://ssl.sh/zh/glossary/mtls/): mTLS 是服务器和客户端在握手中都用 X.509 证书向对方证明身份的 TLS，也叫双向 TLS 认证。
- [SNI](https://ssl.sh/zh/glossary/sni/): SNI 是 TLS 的一个扩展，客户端在 ClientHello 中写明要访问的域名，使同一个 IP 能为多个 HTTPS 站点分别返回各自的证书。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [SSL 解密检测](https://ssl.sh/zh/glossary/ssl-inspection/): SSL 解密检测是企业安全网关借助受管设备信任的私有 CA，对 TLS 流量进行解密、检查后再重新加密的做法。
