我们有两台服务器,它们位于不同的网络中。我们希望从客户端到前端以及从前端到后端建立 SSL 通信。
前端能够接收和终止 ssl 流量,但后端 ssl 通信未发生,并出现以下错误:
“服务器节点/web02 已关闭,原因:Layer6 无效响应,信息:“SSL 握手失败”,检查时长:546ms”
haproxy 配置文件:
global
log 127.0.0.1 local1 debug
maxconn 4000
daemon
uid 99
gid 99
stats socket /tmp/haproxy.stats level admin
defaults
mode http
log global
option forwardfor
option http-server-close
timeout server 5s
timeout connect 5s
timeout client 5s
frontend www-https
bind <Ip-address>:443 ssl crt /home/user/SSL/domain-name.in.pem
reqadd X-Forwarded-Proto:\ https
default_backend nodes
backend nodes
balance roundrobin
cookie JSESSIONID prefix indirect nocache
server web01 <IP-address>:8443 ssl verify none check cookie web01
server web02 <IP-address>:8443 ssl crt /home/SSL/domain-name.in.pem ca-file /home/SSL/gdig2.crt verify required check cookie web02
非常感谢您的帮助
答案1
我们希望从前端到后端建立 SSL 通信
这毫无意义:haproxy 前端和 haproxy 后端之间没有 TCP 通信。这是 haproxy 进程内部的逻辑映射。您的实际后端 TLS 是在后端服务器本身上配置<IP-address>:8443
的web02
。
因此,SSL handshake failure
您收到的原因是 HAproxy 无法使用给定的ca-file
证书验证 web02 的证书。或者您的客户端身份验证失败(通过 指定的客户端身份验证server web02 ... ssl crt ...
)。查看后端行:
server web02 <IP-address>:8443 ssl crt /home/SSL/domain-name.in.pem ca-file /home/SSL/gdig2.crt verify required check cookie web02
您确定要使用客户端身份验证吗?如果是,请验证您的客户端证书:对我来说,使用相同的证书进行客户端身份验证和在前端 haproxy 规范中为 TLS 提供服务的证书 ( /home/SSL/domain-name.in.pem
) 是非常不寻常的。