Apache は使用する証明書をどのように選択するのでしょうか?

Apache は使用する証明書をどのように選択するのでしょうか?

現在、Apache は、certbot と http チャレンジで生成されたホスト証明書を使用して、いくつかのサブドメインをホストしています。

ここで、存在しないサブドメインをメインのサブドメインにリダイレクトするためのデフォルトの仮想 SSL ホストをセットアップします。この目的のために、DNS チャレンジ付きのワイルドカード証明書を生成します。

現在、DNS チャレンジによる更新を自動化できないため、Apache のデフォルトの SSL ホストに対してのみワイルドカード証明書を使用したいと思います。

私の質問は、Apache とブラウザの間で最初のネゴシエーションが行われるとき、Apache は最初に要求されたホストに一致する構成内の証明書を探すのか、それとも Apache は毎回デフォルトの SSL ホストで構成されたワイルドカード証明書を提供するのかということです。

答え1

Apache ドキュメントリクエストに対してどの VirtualHost が選択されるかについての詳細なセクションが含まれています。「サーバーが適切な名前ベースの仮想ホストを選択する方法」セクションからの引用:

名前ベースの仮想ホスト解決の最初のステップは IP ベースの解決であることを認識することが重要です。名前ベースの仮想ホスト解決では、候補を最も適切な IP ベースの一致に絞り込んだ後に、最も適切な名前ベースの仮想ホストのみが選択されます。すべての VirtualHost ディレクティブで IP アドレスにワイルドカード (*) を使用すると、この IP ベースのマッピングは無関係になります。

リクエストが到着すると、サーバーはリクエストで使用される IP アドレスとポートに基づいて、最も一致する (最も具体的な) <VirtualHost> 引数を見つけます。この最適に一致するアドレスとポートの組み合わせを含む仮想ホストが複数ある場合、Apache は ServerName および ServerAlias ディレクティブをリクエストに存在するサーバー名とさらに比較します。

名前ベースの仮想ホストから ServerName ディレクティブを省略すると、サーバーはデフォルトで、システム ホスト名から派生した完全修飾ドメイン名 (FQDN) を使用します。この暗黙的に設定されたサーバー名は、直感に反する仮想ホストのマッチングにつながる可能性があるため、推奨されません。

専用の Default VirtualHost を作成する必要があります。別の VirtualHost ブロックに明示的にリストされていないホストへのすべてのリクエストはそこに送信されるため、そこで使用する証明書を選択できます。

答え2

Apacheでは、仮想ホストレベルでSSLCertificateFileディレクティブを指定できます。SSL証明書ファイル、これは「コンテキスト: サーバー構成、仮想ホスト」を示しています。したがって、要求に応答するためにどの仮想ホストを使用するか (デフォルトの仮想ホストでも、別の仮想ホストでも)、その仮想ホストで SSLCertificateFile を使用して構成した証明書が使用されます。

これでご質問への回答になったでしょうか?

関連情報