![带有 TLS 的 HAProxy 后端停止工作](https://linux22.com/image/656798/%E5%B8%A6%E6%9C%89%20TLS%20%E7%9A%84%20HAProxy%20%E5%90%8E%E7%AB%AF%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C.png)
我在使用带有 TLS 的后端的 HAProxy 服务器之一上遇到了问题。启动 HAProxy 时,后端会报告所有服务器都已关闭:
Server web_remote/apache_rem_1 is DOWN, reason: Layer6 invalid response, info: "SSL handshake failure", check duration: 41ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
后端的配置如下:
backend web_remote
balance leastconn
option httpchk HEAD /
option redispatch
retries 3
default-server inter 5000 rise 2 fall 5 maxconn 10000 maxqueue 50000
server apache_rem_1 192.0.2.1:12345 check maxconn 1000 maxqueue 5000 ssl ca-file /etc/ssl/web.pem
server apache_rem_2 2001:DB8:3:4:5:6:8:12345 check maxconn 1000 maxqueue 5000 ssl ca-file /etc/ssl/web.pem
到目前为止,这个后端运行良好,wget
服务器上的快速运行也运行良好,并openssl s_client
报告后端的证书有效。
HAProxy/TLS 是否还有其他配置错误?当其他所有信息都报告握手成功时,我该如何调试此问题?
答案1
在尝试使用 HAProxy 进行调试的方法后,我最终放弃并使用 tcpdump 来调试网络流量。
通过将 TLS 密钥和 PCAP 文件导入启用 SSL 的 Wireshark,我很快就发现了错误:HAProxy 不知道根 CA,因此验证失败。原来,一位同事更改了证书,但不知道此 PEM 需要完整的信任链。将正确的根 CA 添加到 .PEM 文件解决了这个问题,服务器恢复正常运行。
答案2
尝试添加check-ssl
行server
以强制健康检查也通过 SSL 运行。
答案3
我遇到了同样的问题。原来我的后端 SSL 服务器不支持 TLSv1.3。因此,为了使其正常工作,我不得不使用force-tlsv12
server server.example.com 10.0.0.1:443 check ssl verify none force-tlsv12