HAProxy 如何配置 SSL TLS 加密协议禁止弱加密套件

文章导读
在 HAProxy 中禁止弱加密套件,最推荐的做法是在配置文件的 global 或 defaults 段通过 ssl-default-bind-ciphers 和 ssl-default-bind-options 参数强制指定高强度算法,并禁用 TLS 1.1 及以下版本,适用于面向公网的生产环境。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

在 HAProxy 中禁止弱加密套件,最推荐的做法是在配置文件的 global 或 defaults 段通过 ssl-default-bind-ciphers 和 ssl-default-bind-options 参数强制指定高强度算法,并禁用 TLS 1.1 及以下版本,适用于面向公网的生产环境。

先说结论:配置 HAProxy 的 SSL 绑定选项是阻断弱加密最直接的方式,但需兼顾旧客户端兼容性。

  • 先判断:确认业务是否还有必须支持的老版本客户端(如 IE11 以下、旧版 Android)。
  • 优先做:在 global 段设置 ssl-default-bind-options 禁用低版本 TLS,并限定加密套件列表。
  • 再验证:使用 openssl 或 sslscan 工具测试端口,确认弱套件无法握手。

命令速用版

这里提供一段可直接参考的配置片段,放入 haproxy.cfg 的 global 部分即可生效:

global
    # 禁用 TLS 1.0 和 1.1,强制最低 TLS 1.2
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
    # 设置 TLS 1.2 及以下的强加密套件
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
    # 设置 TLS 1.3 加密套件 (HAProxy 2.0+)
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

为什么会这样

弱加密套件(如 RC4、DES、3DES 或基于 MD5 的算法)存在已知的数学缺陷,攻击者可以通过算力暴力破解或利用协议漏洞(如 POODLE、BEAST)解密流量。HAProxy 作为入口网关,如果不显式禁止这些套件,默认可能会为了兼容性保留它们,导致安全风险。此外,TLS 1.0 和 1.1 协议本身已被主要浏览器和标准组织弃用,继续开放会降低安全评级。

分步处理

1. 备份配置:修改前务必备份当前配置文件,防止配置错误导致服务无法启动。

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

2. 编辑配置:打开配置文件,找到 global 段落,添加或修改上述 ssl-default-bind 相关参数。注意 HAProxy 2.0 版本后才正式支持 TLS 1.3 配置参数。

3. 检查语法:重载前必须检查配置语法是否正确。

haproxy -c -f /etc/haproxy/haproxy.cfg

4. 平滑重载:语法检查通过后,执行重载命令,避免中断现有连接。

systemctl reload haproxy

怎么验证是否生效

使用 openssl 命令尝试连接,指定弱协议或弱套件,观察是否握手失败。

HAProxy 如何配置 SSL TLS 加密协议禁止弱加密套件

测试 TLS 1.1 是否被禁:

openssl s_client -connect 你的域名:443 -tls1_1

如果配置生效,上述命令应返回握手错误(Handshake Failure)。

测试当前协商的加密套件:

openssl s_client -connect 你的域名:443

查看输出中的 Cipher 字段,确认是否为强套件(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。

常见坑

1. 旧客户端无法访问:强制 TLS 1.2 会导致 Windows XP 上的 IE 或部分旧版 Android 设备无法连接,需评估业务影响。

2. TLS 1.3 参数混淆:HAProxy 中 ssl-default-bind-ciphers 仅针对 TLS 1.2 及以下,TLS 1.3 需使用 ssl-default-bind-ciphersuites,写错会导致 TLS 1.3 回退或使用默认值。

3. 重载失败导致停机:如果配置语法有误且直接 restart 而非 reload,可能导致服务中断。务必先执行 haproxy -c 检查。

参考来源

  • HAProxy Official Documentation - Management Guide (https://www.haproxy.com/documentation/)
  • Mozilla SSL Configuration Generator (https://ssl-config.mozilla.org/)