Haproxy

如何在終止 TLS 時通過 HA 代理轉發客戶端身份驗證證書?

  • July 5, 2019

我有一個由 HA 代理負載平衡器前端的 Web API。Web API 使用客戶端認證證書進行身份認證和授權。我希望 HA 代理設備終止 TLS 連接並在後端使用普通 HTTP 與 Web API 對話,但我需要通過 HTTP 連接傳遞的客戶端身份驗證證書。需要如何設置 HA 代理以將請求中的身份驗證證書保留在後端之外,但僅使用 HTTP?

您可以設置各種 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

然後,您的應用程序必須檢查標頭並採取適當的措施。

此範例取自raymii.org,您可以在其中找到一些有關將客戶端證書與 HAProxy 一起使用的其他有用資訊,例如驗證客戶端證書和拒絕無效證書。

引用自:https://serverfault.com/questions/974148