
接続クライアントの認証に相互 TLS を使用する TCP アプリケーションがあります。
トラフィックが増加したため、アプリケーションをクラスタ化し、nginx を使用してノードの負荷を分散したいと考えています。stream
これは、(私の理解では) レイヤー 4 バランサーとして機能する nginx のモジュールで既に動作しています。
この時点で、mTLS 検証に失敗した接続試行を nginx で直ちにドロップして、上流ノードがそれらの接続試行に煩わされないようにするのが妥当であるように思われます。
ただし、これは nginx で TLS 接続を終了する必要があることを意味します。残念ながら、私のアプリケーションは、検証されたクライアント証明書からクライアントの ID を取得することに依存しています。
nginx で mTLS をチェックし、アップストリーム接続にクライアント証明書を再利用する方法はありますか?
HTTP アプリケーションの場合、nginx で TLS 接続を終了し、クライアント証明書をカスタム ヘッダー (例proxy_set_header X-SSL-CERT $ssl_client_cert;
) として渡すという回避策を見たことがありますが、明らかに私のケースでは機能しません。
答え1
いいえ、それはできません。接続を終了しながらエンドツーエンドで維持することはできません。
しかし、もしあなたが信頼プロキシの場合、プロキシはヘッダーを挿入し、独自のクライアント証明書を使用して、接続が信頼でき、指定されたクライアント証明書によって開始されたことを認証できます。