SSL 対応の Apache ホストの非 SSL バージョンが別のホストからのコンテンツを提供しているのはなぜですか?

SSL 対応の Apache ホストの非 SSL バージョンが別のホストからのコンテンツを提供しているのはなぜですか?

Apache/Ubuntu を使用して localhost 上で実行している Web サイトがいくつかあります。

私は、これらのうちの 1 つ ( と呼びます) に自己署名証明書を正常にインストールしましたsecuresite.local。別の非 SSL サイト ( と呼びます)insecuresite.localも期待どおりに動作します。

つまり、

https://securesite.local
http://insecuresite.local

これらはそれぞれ正しいコンテンツを提供します。

しかし、私がhttp://securesite.localそこへ移動すると、insecure.local

私の/etc/hostsには

127.0.1.1 securesite.local
127.0.1.1 insecuresite.local

/etc/apache2/apache2.confには

IncludeOptional sites-enabled/*.conf

securesite または insecuresite への明示的な参照は含まれていません。

ls /etc/apache2/sites-enabled

securesite.conf insecuresite.conf

insecuresite.confには(ここでは省略)が含まれています

<VirtualHost insecuresite.local:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

securesite.confには以下が含まれています(ここでは省略)

<VirtualHost securesite.local:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Apache が 443 以外のポート経由で securesite.local への接続を拒否し、localhost:80 でのトラフィックを許可している他のサイトからのコンテンツの提供にフォールバックしないようにします。

なぜこのようなことが起こるのでしょうか、またどうすれば止められるのでしょうか?

答え1

insecuresite.confとsecuresite.confファイルによると、一方はポート80でリッスンしており、もう一方は443でリッスンしています。http://securesite.localブラウザはポート 80 からデータを要求していますが、ポート 80 で提供されているのは insecuresite.local のみです。

これを修正するには、 securesite.local:80 の仮想ホストを定義し、https にリダイレクトする必要があります。また、NameVirtualHost *apache2.conf ファイルに次の内容が含まれていることを確認する必要があります。

2 つの conf ファイルは次のようになります。

<VirtualHost *:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

そして

<VirtualHost *:80>
    ServerName securesite.local
    ServerAlias securesite.local
    Redirect permanent / https://securesite.local
    # ... 
<VirtualHost *:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

NameVirtualHost オプションを有効にすると、Apache は ServerNames と ServerAliases を調べ、それに応じてデータを提供します。

答え2

ソケットはバインドされ、接続はホスト名ではなく IP アドレスです。両方の仮想ホストは同一のIPアドレスを持っているため、リスナーソケットは両方に1つしかなく、Apacheはどのドメインが要求されるかを知ることができません。接続を受け入れたので、HTTP リクエスト (または TLS SNI ハンドシェイク) を受信する必要があります。

ファイルは、sites-enabled文字順に読み取られるため、またはそれに類似した名前のファイルに「フォールバック」仮想ホストを設定できますsites-enabled/00-default.conf。(言い換えると、同じ IP の他の仮想ホストの前にリストします。)

関連情報