web-dev-qa-db-ja.com

サーバーを再起動せずに単一のvHostで無制限のサイトをSSLで保護

Webサイトをホストするために、Wixに概念が似たプラットフォームを作成しています。すべてのサイト(特定の問題がサイトごとにこれを妨げる場合を除く)がhttpsによって保護されることを保証したい.

システムの基本は、理論的には無制限の数のドメインが、すべてのポートでデフォルトのApache vHostの下で同じPHPアプリケーションを実行する多数の仮想サーバーに接続するロードバランサーにマップできることです。 PHPアプリケーションに転送される443トラフィック。

アプリケーションへのアクセスに使用できるドメインの数に制限はなく、毎日新しいドメインが追加されるため、これを達成するために適切な種類の証明書が何かを探しています。

理想的には、次の条件を満たすソリューションまたは証明書タイプを求めています...

  • ドメインレベルの制限なし(つまり、新しいサイトがデータベースに追加されるたびに証明書を再生成する必要はありません)
  • データベースに保存されており、どこのサーバーにも表示されないドメイン名を認識する必要はありません。
  • 仮想サーバーは破棄され、新しいIPアドレスと新しいサーバー名で頻繁に再プロビジョニングされるため、できれば何らかの形の自動プロセスが理想的です。

LetsEncryptなどの自動化されたサービスを介してApacheでホスティングするより古典的なサイトで、vhostごとに単一の証明書を使用してこれを行う方法を知っていますが、上記は私を困惑させ、これでオンラインで何かを見つけることができませんでした。

1

SSL証明書をドメイン名に接続するには、次の3つの方法があります。

  • ドメインの証明書を購入します。そのドメインの一意のIPアドレスでサーバーを実行します。 (クラシックSSL)
  • 複数のドメインをカバーする単一の証明書を購入します。これらすべてのドメインの一意のIPアドレスでサーバーを実行します。ドメインを追加するときに証明書を再発行します。これは、サブジェクト代替名(SAN)またはユニファイドコミュニケーション証明書(UCC)として知られています。
  • ホストごとに個別の証明書を購入します。 1つのIPアドレスですべてをホストします。仮想ホスト構成で証明書を指定します。これはサーバー名表示(SNI)として知られ、現在98%のブラウザーをサポートしています。一部の古いAndroidおよびIEブラウザーのみがサポートしていません。

証明書を再発行せずに新しいホスト名を追加するという要件は、SNIを使用する必要があることを意味します。

ただし、サーバーに接続するドメイン名をサーバーが認識しないという2番目の要件は、SNIと互換性がありません。 SNIは、ホスト名に基づいて、使用する正しい証明書をネゴシエートします。そのため、通常、SSL証明書はApache仮想ホストで構成されます。 ApacheはHTTPS接続をネゴシエートし、そのプロセスのホスト名を認識する必要があります。

Apacheには、サーバーを再起動して仮想ホストを追加する機能があります。 Apacheは、再起動なしの構成の再読み込みをサポートしています。通常は、仮想ホストの構成ファイルをSSL証明書とともに追加します。次に、コマンドを実行して、Apacheに構成をリロードさせ、再起動せずに新しいホストの提供を開始します。私はUbuntuを使用しています。Ubuntuでのコマンドは次のとおりです。

Sudo service Apache2 reload
1