如何在终止 TLS 时通过 HA 代理转发客户端身份验证证书?

Mat*_*ith 6 certificate haproxy client-certificate

我有一个以 HA 代理负载均衡器为前端的 Web API。Web API 使用客户端认证证书进行身份认证和授权。我希望 HA 代理设备终止 TLS 连接并在后端使用普通 HTTP 与 Web API 通信,但我需要通过 HTTP 连接传递的客户端身份验证证书。需要如何设置 HA 代理以将请求的身份验证证书保留在后端,但仅使用 HTTP?

Mic*_*ton 7

您可以设置要发送到后端的各种 HTTP 标头,这些标头与所提供的 TLS 客户端证书有关。例如:

frontend intranet
    bind 10.20.30.40:443 ssl crt /etc/haproxy/pem/server.pem ca-file /etc/haproxy/pem/client-chain.pem verify required
    http-request set-header X-SSL                       %[ssl_fc]
    http-request set-header X-SSL-Client-Verify         %[ssl_c_verify]
    http-request set-header X-SSL-Client-SHA1           %{+Q}[ssl_c_sha1]
    http-request set-header X-SSL-Client-DN             %{+Q}[ssl_c_s_dn]
    http-request set-header X-SSL-Client-CN             %{+Q}[ssl_c_s_dn(cn)]
    http-request set-header X-SSL-Issuer                %{+Q}[ssl_c_i_dn]
    http-request set-header X-SSL-Client-Not-Before     %{+Q}[ssl_c_notbefore]
    http-request set-header X-SSL-Client-Not-After      %{+Q}[ssl_c_notafter]
    default_backend your_backend
Run Code Online (Sandbox Code Playgroud)

然后,您的应用程序必须检查标头并采取适当的措施。

此示例取自raymii.org,您可能会在其中找到一些有关在 HAProxy 中使用客户端证书的其他有用信息,例如验证客户端证书和拒绝无效证书。

  • @MattHamsmith 您可以在 HAProxy 或后端服务器上终止 TLS。如果您在 HAProxy 处终止它,则 HAProxy 必须处理客户端证书,包括验证。您无法“转发”客户端证书,但可以转发其元数据。如果您的后端实际上必须执行证书验证,则您无法使用 HAProxy 终止 TLS。你必须通过它。 (2认同)