SSL 卸载 (SSL Offloading、TLS 卸载)
定义
SSL 卸载是把 TLS 握手和加解密的计算工作从应用服务器转移到专门的代理、负载均衡或硬件设备上。
SSL 卸载是“在应用前面终止 TLS”背后的性能与运维动机。由一个专门组件负责握手、持有证书并完成加解密,应用服务器只处理 HTTP;这个组件可以是负载均衡、应用交付控制器(ADC)、反向代理,或配有加密加速卡、HSM 的服务器。常见两种做法:纯卸载,代理到后端走明文;SSL 桥接(重新加密),代理解密后做检查或路由,再与后端新建一条 TLS 连接。
为什么重要
TLS 中开销大的是每次握手里的公钥运算;在支持 AES 硬件指令的 CPU 上,AES-GCM 批量加密的成本很低,ECDSA 证书的握手也比 RSA 更省。所以在现代硬件上,卸载的收益往往不在于省 CPU,而在于把证书、续签、协议版本和密码套件策略集中到一处管理。代价是那段明文链路:纯卸载只适合可信且隔离的内网;有合规要求、共享的云上网络或零信任架构,一般要求桥接。做桥接时,代理必须校验后端证书,否则第二段同样可能被截获。在云上用负载均衡卸载 HTTPS 时,也要留意后端协议选的是 HTTP 还是 HTTPS。
例子
Nginx 做桥接。Nginx 默认不校验上游证书,需要显式开启:
location / {
proxy_pass https://backend.internal:8443;
proxy_ssl_server_name on;
proxy_ssl_name backend.internal;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /etc/nginx/internal-ca.pem;
}
纯卸载则改成 proxy_pass http://10.0.0.11:8080;,去掉上游 TLS 相关配置。
常见误区
- TLS 太耗资源,应用服务器扛不住,必须卸载。 有 AES 硬件指令和 ECDSA 证书时,现代服务器上的开销通常不大,应按架构和证书管理需要来决定。
- 写了
proxy_pass https://后端就经过认证了。 Nginx 只是加密了这一段,不设置proxy_ssl_verify on就不会校验证书。 - SSL 卸载和 TLS 终止是一回事。 TLS 终止说的是客户端 TLS 在哪里结束;卸载是把这项工作交给专门基础设施的决定,可以重新加密,也可以不加密。