web-dev-qa-db-ja.com

どのssl証明書がリバースプロキシのどこに行くのですか? -nginx

nginxリバースプロキシサーバーのアップストリームSSLの説明が必要です

私はnginxのドキュメントを読んでいます リバースプロキシに関して および 上流のサーバーへのssl接続の保護 ですが、どのssl証明書がどこに行くのかまだ混乱しています。私が見つけた例の多くにはnginxプロキシlocalhostがありますが、私の状況には、異なるサーバー、ポート、および物理的な場所にあるエンドポイントがあります。

Nginxサーバーでいくつかのドメインを解決したいのですが。これらの各ドメインには、現在のサーバーに実際のドメイン名のssl証明書があります。

現在、各サーバーは独自のネットワークロケーションと物理ロケーションで実行されていますが、これらのエンドポイントを管理する単一のポイントが欲しいです。

私の最終結果は次のようになります

                             client
                               |
                             nginx
                       https://example1.com
                       https://example2.com 
                       https://example3.com
                             x.x.x.x
                               |
               -----------------------------------------
               |                |                      |
https://example1.com    https://example2.com    https://example3.com
   a.b.c.d:1234             e.f.g.h:5678            i.j.k.l:9012

現在 https://example1.com は、独自のssl証明書がインストールされているa.b.c.d:1234に解決されます。 nginxサーバーがドメインexample1.comにサービスを提供していることをクライアントに示す必要があるので、example1.com sslをフロントランニングnginxサーバーに移動する必要があると思いますか?それを行う場合、安全なアップストリーム接続を維持するためにa.b.c.d:1234でどのssl証明書を使用しますか?

Nginxのドキュメントにはclient.crtとserver.crtとありますが、CAはドメインを使用してこれらを登録します。リバースプロキシの状況でのクライアントとサーバーとは何ですか?私にとってクライアントは、リクエストを行うブラウザです。

どのssl証明書がリバースプロキシのどこに行くのですか?

編集:

プロキシサーバーにURLベースの証明書を配置するだけで、安全な接続があるように見えることはすでに知っています。私が知りたいのは、バックエンドサーバーに配置するssl証明書です。それぞれの証明書を再利用するだけですか?たぶん......だろう example1.com.crtプロキシサーバーとバックエンドサーバーの両方に移動しますか?

2
Altimus Prime

ドメインの証明書は、クライアントが「見る」場所に行く必要があります。したがって、あなたの場合、nginxサーバーのみをインターネットから利用できるようにするには、すべてのパブリック証明書をnginxサーバーに送る必要があります。

バックエンド接続を保護する場合は、それらのサーバーで必要な証明書を使用できます。自己署名したものを使用し、nginxサーバーで証明書チェックを無効にすることもできますが、独自のCAを作成して証明書をバックエンドに配布する方が賢明です。

バックエンドサーバーに「内部」名と一致する内部証明書があることを除いて、構成は描画したとおりのようになります。

                                                 client
                                                   |
                                                 nginx
                                           (https://example1.com)
                                           (https://example1.com)
                                           (https://example1.com)
                                                    |
            +---------------------------------------+-----------------------------------+
            |                                       |                                   |
            |                                       |                                   |
https://example1.internal.local/   https://example2.internal.local/   https://example3.internal.local/
       a.b.c.d                                  e.f.g.h                               i.j.k.l

インターネットからバックエンドサーバーにアクセスできる場合は、それらのhttpsポートをファイアウォールで保護して、nginxサーバーのみが接続できるようにすることができます。

クライアントとサーバーに関する質問について:ネットワークでは、クライアントは接続を開始するクライアントです。したがって、設定では、ブラウザはクライアントであり、nginxサーバーは同時にクライアントとサーバーになります。これはブラウザのサーバーですが、バックエンドサーバーのクライアントです。

3
Lacek

かなりの可能性があります。ここに2つあります。

  1. SANs を使用して、すべてのドメインを含むリバースプロキシに1つの証明書があります
  2. Nginxから対応するサーバーにすべてのドメインをリダイレクトリダイレクトし、URLを書き換えます

クライアントにリバースプロキシとのみ通信させて(1)、nginxが上流サーバーへの接続を処理するか、nginxにクライアントに他のサーバーに接続するように指示させる(2)ため、パブリックIP/DNS /証明書が必要ですそれから、彼ら自身の。

ネットワークレイアウトに応じて、証明書を使用してリバースプロキシとアップストリームサーバー間のトラフィックを暗号化することもできます(おそらくそうする必要があります)。そのためには、すべての上流サーバーの証明書が必要ですが、自己署名することもできます(そうすべきではありません)。

Let's Encryptのようなものを使用している場合、証明書でのSANの生成は今日では非常に簡単なので、通常はオプション1を使用します。

1
Lenniey