配置 HAProxy SSL 加密时,务必在 global 段设置 tune.ssl.default-dh-param 2048 以避免警告并确保加密强度,这是 2026 年 4 月 24 日技术文档中明确指出的安全基线。
原因分析
HTTP 协议默认以明文方式发送请求,面临“窃听”风险,如同在公共场所大声说出银行卡密码(2026 年 4 月 24 日资料)。未加密传输会导致个人数据、登录凭证被黑客截获后直接读取明文内容,而 SSL 证书使用公钥加密算法将敏感信息转换为不可读的密文(2025 年 12 月 12 日资料)。
解决方案
1. 验证 SSL 支持
执行 ldd haproxy | grep ssl 命令,确认输出中包含 libssl.so.10 => /lib64/libssl.so.10,若不支持需重新编译(2026 年 4 月 24 日资料)。
2. 编译安装(如需)
使用命令 make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz 进行编译,注意 TARGET 值需根据 uname -r 查看的内核版本设定,2.6 以上都用 linux26(2026 年 4 月 24 日资料)。
3. 证书合并与配置
将秘钥和证书内容吸入 pem 文件,例如 cat test.cn_RSA.key test.cn.crt > test.pem。在 haproxy.cfg 中配置 bind *.*.*.*:443 ssl crt /etc/haproxy/test.pem(2023 年 11 月 16 日 博客园)。
注意事项
性能问题:此方式会使得 HAProxy 服务器压力较大,为了考虑性能问题,建议将证书配置与 nginx 服务器上(2023 年 11 月 16 日 博客园)。
密钥强度:早期示范曾使用 openssl genrsa -out ... 1024 生成密钥(2017 年 5 月 4 日),但现行配置建议修改默认使用 2048bit 加密,不设置会有警告(2026 年 4 月 24 日资料)。
SNI 兼容性:Java SE 7 启用了服务器名称指示 (SNI),如果返回的证书与期望的主机名不匹配,那么将抛出异常(2026 年 4 月 29 日 资料)。
参考来源
来源:技术文档 - HAProxy 如何配置 SSL(2026 年 4 月 24 日)
来源:博客园 - haproxy ssl 证书配置 - 金笛秀才(2023 年 11 月 16 日)
来源:博客园 - haproxy 实现 ssl 套接字加密 - ivy_wang(2017 年 5 月 4 日)
来源:IBM 文档 - 使用安全套接字层 (SSL) 确保通信安全(2026 年 4 月 29 日)