使用 HAProxy 的 2 路 TLS 通过命令行进行身份验证,但在浏览器中失败

使用 HAProxy 的 2 路 TLS 通过命令行进行身份验证,但在浏览器中失败

为了进行概念验证开发,我在本地计算机 (OSX) 上运行了一个 HAProxy 服务器,它希望与任何客户端建立双向 TLS,然后将该客户端转发到 Web 服务器。

我跟着本教程设置身份验证并本教程创建我自己的证书。我的 haproxy 配置文件如下所示:

global
    log 127.0.0.1 local1 notice

frontend intranet
    mode http
    log-format %T\ %t\ %U
    log global
    bind *:2000 ssl crt both.pem ca-file myCA.pem verify required
    default_backend helpdesk

backend helpdesk
    mode http
    server helpdesk 127.0.0.1:9000 check

both.pem具有用于生成根 CA 的 RSA 私钥和证书本身,并且myCA.pem只是证书。这可行,但如果有更好的方法,请告诉我。两次包含证书似乎没有必要重复。

我可以使用连接到服务器openssl s_client -connect 127.0.0.1:2000 -cert ./derived.crt -key ./derived.key。我还可以通过将派生证书和密钥替换为根证书和密钥来进行连接。通过这两种方式,我都能成功握手并在端口 9000 上连接到 Web 服务器(我可以发送 GET 并接收回 html)。为了保持理智,我还生成了第二个不相关的根 CA,该根 CA 无法进行握手。

我尝试按照第二个教程的说明将派生 CA 和根 CA 添加到我的证书中。它们已被添加并受到信任,但 Safari 仍然无法连接到服务器。它告诉我服务器意外地断开了连接(我假设这意味着握手失败或者甚至可能没有尝试)。 Chrome 表示收到了空响应。

我将尝试与邮递员一起尝试,看看我是否可以得到与 openssl 在失败时得到的相同响应(它明确地告诉我握手失败),但我想在这里问这个,以防我错过了一些简单的东西你知道的。任何帮助是极大的赞赏。

更新:我发现我需要将 https:// 添加到地址的开头。现在浏览器要求我选择要使用的证书。但是,它只显示系统中默认可用的两个证书(工作证书),而不是我的新证书,它出现在钥匙串列表中。

更新 2:证书的钥匙串中有两个不同的部分。一种称为“证书”。这就是我导入证书时所在的位置。另一个称为“我的证书”,它似乎是“证书”的子集。我在想如果我能找到一种方法在这里添加我的自定义证书,那么我就可以使用它。

答案1

使用我最终找到的帖子解决了问题提出不同的要求

该命令openssl pkcs12 -export -clcerts -inkey private.key -in certificate.crt -out MyPKCS12.p12 -name "Your Name"可用于创建一个证书,该证书可添加到钥匙串中,然后在与服务器建立连接时在 Safari 中进行选择。

相关内容