
我有一個 TCP 應用程序,它使用雙向 TLS 來驗證連接客戶端的身份。
由於流量增加,我想對應用程式進行叢集化並使用 nginx 對節點進行負載平衡。我已經使用了 nginx 的stream
模組,它(據我理解)充當第 4 層平衡器。
在這一點上,我認為立即在 nginx 上刪除未通過 mTLS 驗證的連接嘗試似乎是合理的,因此上游節點不必理會它們。
然而,這意味著我必須終止 nginx 上的 TLS 連線。不幸的是,我的應用程式依賴於從經過驗證的客戶端憑證中取得客戶端的身份。
有沒有辦法在 nginx 上進行 mTLS 檢查,然後重新使用客戶端憑證進行上游連線?
對於 HTTP 應用程序,我已經看到了終止 nginx 上的 TLS 連接並將客戶端憑證作為自訂標頭傳遞的解決方法(例如proxy_set_header X-SSL-CERT $ssl_client_cert;
),但這顯然不適用於我的情況。
答案1
不,你不能那樣做。您無法既終止連線又保持端對端連線。
但如果你相信您的代理,您的代理可以簡單地註入標頭並使用它自己的客戶端證書來驗證連接是否可信並由給定的客戶端證書發起。