如何使用HAProxy搭建HTTPS代理实现TLS 1.3到TLS 1.2的降级
HAProxy TLS版本桥接配置方案
前提条件
- 所用HAProxy版本≥2.0,编译依赖的OpenSSL版本≥1.1.1(满足TLS 1.3支持要求)
- 提前准备好对应站点的SSL证书及私钥文件,需被老旧客户端浏览器信任
完整配置示例
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # 全局SSL加密套件配置,同时兼容TLS1.2、TLS1.3 ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 # 面向老旧浏览器的前端配置 frontend https_front # 强制仅使用TLS1.2和客户端握手,绑定站点证书 bind 0.0.0.0:443 ssl crt /etc/haproxy/certs/your_domain.pem ssl-min-ver TLSv1.2 ssl-max-ver TLSv1.2 default_backend https_back # 面向仅支持TLS1.3的Web服务器的后端配置 backend https_back # 强制仅使用TLS1.3和上游Web服务器握手 server web_server 192.168.XX.XX:443 ssl ssl-min-ver TLSv1.3 ssl-max-ver TLSv1.3 # 若后端使用自签证书,可添加verify none参数跳过证书校验(生产环境不推荐) # server web_server 192.168.XX.XX:443 ssl ssl-min-ver TLSv1.3 ssl-max-ver TLSv1.3 verify none
配置说明
- 前端面向客户端侧:通过
ssl-min-ver和ssl-max-ver固定仅启用TLS 1.2协议,负责和老旧客户端完成TLS 1.2握手、解析请求 - 后端面向Web服务器侧:同样通过版本参数固定仅启用TLS 1.3协议,负责和仅支持TLS 1.3的上游服务器完成TLS 1.3握手、转发客户端请求,再将服务端返回的内容通过前端的TLS 1.2通道回传给客户端,完成整个版本桥接流程
有效性验证
配置完成重启HAProxy后,可通过openssl命令快速验证效果:
- 验证前端TLS1.2支持:
openssl s_client -connect 你的HAProxy部署地址:443 -tls1_2,返回握手成功即代表客户端侧配置正常 - 验证后端TLS1.3连接:
openssl s_client -connect 上游Web服务器地址:443 -tls1_3,返回握手成功即代表后端链路配置正常
内容的提问来源于stack exchange,提问作者Touisteur EmporteUneVache
相关产品推荐
相关产品推荐

