Haproxy SSL重定向握手失败

5
我已经安装了haproxy v1.5.4并成功使用http和https。我将*:80和:*443绑定到同一前端,并使用相同的acls。
我希望创建一个http重定向到https。
frontend http-in
    bind *:80
    bind *:443 ssl crt /etc/pki/tls/certs/...

    ...

    acl is_office path_beg /office
    http-request redirect scheme https if !{ ssl_fc } is_office

    use_backend office if is_office

这会导致
10.XXXXX:36909 [16/Dec/2015:17:23:07.678] http-in/2: SSL handshake failure

当我通过http访问(期望重定向)时

如果我通过https访问,则会正确连接到后端并通过443代理服务。

backend office
  balance roundrobin
  server backbone-daily 10.XXXXXX:443 ssl check verify none

自签名证书可以验证并且在不进行重定向的情况下工作。在重定向阶段,我感觉好像缺少了一些东西。任何帮助将不胜感激。

首先猜测您在后端设置了“验证”,但使用的是自签名证书,这将导致验证失败。 - fideloper
另外,您是否故意在负载均衡器和后端服务器上都拥有SSL证书?(2个独立的证书) - fideloper
嗨,后端使用的是自签名证书,因此具有“verify none”选项。我想通过SSL代理流量到Apache。我可以终止某些服务的SSL,但不想终止CAS的SSL。我认为,因为我在使用https时可以成功访问后端,所以重定向应该可以正常工作。 - James Morgan
1
你解决了吗? - Piotr
抱歉,这是在以前的公司。现在我在负载均衡器ALB上终止SSL等操作,并且在这个层面上不再烦恼。 - James Morgan
1
有人解决了这个问题吗? - swetad90
1个回答

1
由于我们使用只有GUI的OPNsense中的HAProxy插件,因此我无法提供包含工作代码的答案。但是,我可以追溯最终使我们成功的步骤。
  1. 像往常一样设置您的映射规则
  2. 设置一个没有任何条件但具有函数http-request redirect scheme https的HTTP_REDIRECT规则
  3. 创建两个公共服务,一个用于端口443,另一个用于端口80
  4. 使用SSL Offloading和您的映射规则设置公共服务443
  5. 设置公共服务80 不使用 SSL Offloading,并且仅使用您的HTTP_REDIRECT规则
我怀疑这将转换为类似于以下内容的代码:
frontend http-in
    bind *:443 ssl crt /etc/pki/tls/certs/...
    use_backend office if is_office

frontend no-ssl-http-in
    bind *:80
    http-request redirect scheme https

希望这能帮到仍在寻找解决方案的人。

在HAProxy服务管理中,有一个名为“配置导出”的部分,它会显示从GUI生成的haproxy.cfg文件。您可以在那里查看代码是否符合您的预期。 - Chad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接