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

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

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

答案1

您可以设置要发送到后端的与所呈现的 TLS 客户端证书相关的各种 HTTP 标头。例如:

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

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

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

相关内容