Server 使用SSL和SNI返回HAProxy后端/服务器到特定目标;OpenSSL错误[0x14094410]ssl3“读取字节:sslv3警报握手失败”;
我已经设置了一个HAProxy实例,它应该:Server 使用SSL和SNI返回HAProxy后端/服务器到特定目标;OpenSSL错误[0x14094410]ssl3“读取字节:sslv3警报握手失败”;,server,openssl,backend,haproxy,sni,Server,Openssl,Backend,Haproxy,Sni,我已经设置了一个HAProxy实例,它应该: 卸载前端上的SSL 在后端加载SSL 使用SNI进行上游连接和健康检查 对于本演示,我创建了一个缩短的HAProxy配置,如下所示: global log 127.0.0.1 local0 maxconn 8000 user nobody group nogroup daemon debug #quiet stats s
- 卸载前端上的SSL
- 在后端加载SSL
- 使用SNI进行上游连接和健康检查
global
log 127.0.0.1 local0
maxconn 8000
user nobody
group nogroup
daemon
debug
#quiet
stats socket /var/run/haproxy.sock mode 600 level admin
ssl-default-bind-options no-sslv3
ssl-default-bind-ciphers ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-server-options no-sslv3
ssl-default-server-ciphers ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
tune.ssl.default-dh-param 2048
defaults
log global
mode http
balance roundrobin
option dontlognull
option abortonclose
option redispatch
retries 3
maxconn 18000
timeout connect 30s
timeout client 30s
timeout server 30s
frontend test.local
bind 0.0.0.0:8443
reqadd X-Forwarded-Proto:\ https
option forwardfor
acl api_statusio path_beg -i /status/1.0
use_backend api_statusio if api_statusio
backend api_statusio
option httpchk GET / HTTP/1.1\r\nHost:\ letsencrypt.status.io
http-request set-header Host letsencrypt.status.io
server test2 143.204.101.51:443 ssl check ca-file /etc/ssl/certs/ca-certificates.crt sni str(letsencrypt.status.io) check-ssl check-sni str(letsencrypt.status.io)
例如,使用google.com作为上游,但没有status.io-resource(letsencrypt.status.io只是一个示例):
root@edc5cab629ae:/#haproxy-f./haproxy.cfg
[警告]274/160954(2642):解析[./haproxy.cfg:37]:“reqadd”指令已被弃用,取而代之的是“http请求添加头”,将在下一版本中删除。
[警告]274/160954(2642):模式与和不兼容。只保留。
可用的投票系统:
epoll:pref=300,测试结果正常
轮询:pref=200,测试结果正常
选择:pref=150,测试结果失败
总计:3(2可用),将使用epoll。
可用过滤器:
[SPOE]SPOE
[COMP]压缩
[缓存]缓存
[跟踪]跟踪
使用epoll()作为轮询机制。
fd[0013]OpenSSL错误[0x14094410]ssl3_读取字节:sslv3警报握手失败
[警告]274/160955(2642):服务器api_statusio/test2关闭,原因:套接字错误,信息:“SSL握手失败”,检查持续时间:111ms。剩下0台活动服务器和0台备份服务器。0个会话处于活动状态,0个会话重新排队,队列中剩余0个会话。
[警报]274/160955(2642):后端“api_statusio”没有可用的服务器!
fd[0014]OpenSSL错误[0x14094410]ssl3_读取字节:sslv3警报握手失败
fd[0014]OpenSSL错误[0x14094410]ssl3_读取字节:sslv3警报握手失败
如果我使用openssl s_客户端作为快速检查,这似乎可以正常工作
这是用以下方法测试的:
- HAProxy 2.0.3+OpenSSL 1.1.1c 2019年5月28日(Docker HAProxy:最新版本)
- HAProxy 1.8.8+OpenSSL 1.1.1 2018年9月11日(Ubuntu 18.04)
有什么想法吗?freenode上的一位友好用户#haproxy指出
server test2 143.204.101.51:443 ssl check ca-file /etc/ssl/certs/ca-certificates.crt sni str(letsencrypt.status.io) check-ssl check-sni str(letsencrypt.status.io)
应该是
server test2 143.204.101.51:443 ssl check ca-file /etc/ssl/certs/ca-certificates.crt sni str(letsencrypt.status.io) check-ssl check-sni letsencrypt.status.io
这很有效。解决了这个问题后,我遇到了一个类似的问题,就是在多个上游使用服务器模板,这在这里描述:(但这是一个不同的主题)
server test2 143.204.101.51:443 ssl check ca-file /etc/ssl/certs/ca-certificates.crt sni str(letsencrypt.status.io) check-ssl check-sni letsencrypt.status.io