设想:
我有一台带有 iLO 3 的旧 hp dl360 g7。现代浏览器无法访问它,因为它使用了古老的密码。
在我的内部网络上,我希望 haproxy 与其对话并消除 SSL 错误并使用现代浏览器支持的 SSL 提供内容。
我尝试过的:
frontend ilo3
bind *:3333 ssl crt /etc/letsencrypt/live/mydomain.com/haproxy.pem alpn h2,http/1.1
mode http
use_backend ilo3
backend ilo3
server node1 192.168.2.185 check ssl port 443 verify none
结果:
当我击中时,https://<haproxyip>:3333
我得到:
Jun 25 22:28:46 haproxy haproxy[5750]: 192.168.2.229:54666 [25/Jun/2023:22:28:46.816] ilo3/1: SSL handshake failure
我可能没有意识到自己正在做的事情的困难。非常感谢任何教育。
答案1
握手错误不能被简单地忽略并继续连接。这就像要求汽车在发生致命事故后继续行驶一样。
发生握手错误时,当前连接处于客户端和服务器之间没有共同点来继续握手的状态,例如他们找不到共享的密码、没有共享的协议版本,或者另一个站点只是关闭了底层 TCP 连接。
这与证书验证错误不同,在证书验证中,执行验证的一方(即服务器证书的客户端)可能会决定忽略这些验证问题并继续握手(但现在有中间人攻击的风险)。
现代浏览器无法访问它,因为它使用了古老的密码。
这可能也是 nginx 面临的问题。“支持的密码”就像双方使用的语言。如果他们找不到共同的语言来交谈,沟通就会失败。
这种彼此不理解的问题显然不能简单地忽略。相反,haproxy 需要配置为支持上游也支持的密码和协议。根据上游在协议支持方面的缺陷程度,这可能只需调整密碼和SSL-最小版本设置。在某些情况下(非常旧的破损堆栈),可能需要的旧协议版本或密码可能不会编译到 haproxy 中,因此需要重新编译 openssl 和 haproxy 以支持这些旧的东西。