我有一个由 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 的客户端证书的一些其他有用信息,例如验证客户端证书和拒绝无效证书。