Centos 7マルチサイトサーバーでhttpsを使用すると、.htaccessまたはVirtualHost .confを介したトラフィックリダイレクトが失敗します。

Centos 7マルチサイトサーバーでhttpsを使用すると、.htaccessまたはVirtualHost .confを介したトラフィックリダイレクトが失敗します。

マルチサイト仮想ホストとして構成されたCentos 7サーバーがあります。私がこのサーバーにしたいことの1つは、既存のサブドメインからのトラフィックをプライマリWebサイトのサブディレクトリにリダイレクトすることです。プライマリサイトは同じサーバーにありません。

私は純粋なVirtualHost設定と.htaccessを使って多数の設定を試しました。常にHTTPで動作させることができますが、このVirtualHostにはSSL証明書がなく、リダイレクトトラフィック用にのみ購入できないため、HTTPSでは機能しません。

だから、http://bort.example.comリダイレクトhttps://www.example.com/bortいいけどhttps://bort.example.com無効な証明書に対して常にセキュリティエラーが発生します。

私の現在の理論は、リダイレクトサーバーに証明書がない場合、Apacheは.htaccessファイルの処理さえ拒否するということです。そのため、これを完全に削除し、VirtualHost設定をできるだけ簡単な方法で抽出しようとしました。これが私が今持っているものです。

<VirtualHost *:80>
    ServerName bort.example.com
    Redirect / https://www.example.com/bort
</VirtualHost>

<VirtualHost *:443>
    ServerName bort.example.com
    Redirect / https://www.example.com/bort
</VirtualHost>

これはHTTPトラフィックに対してはまだうまく機能します。動作させるために私は何を見逃していますか?https://bort.example.com

編集:このサーバーの他のWebサイトlisa.example.comにSSL証明書があるようです。これは影響を与える可能性があります。接続しようとしたときに受信した実際のエラーhttps://bort.example.comこれは:

bort.example.com uses an invalid security certificate.

The certificate is only valid for the following names:
lisa.example.com
Error code: SSL_ERROR_BAD_CERT_DOMAIN

ベストアンサー1

HTTPSでは、接続開始時の作業順序は理想的ではありません。これは、HTTPがもともとSSL / TLSとは別に設計されており、両方のテクノロジが完全に機能しないためです。

サーバーが着信HTTPS接続を受け入れると、最初のステップはSSL / TLSネゴシエーションです。これは、他のデータが接続を介して転送される前に発生します。特に、クライアントがクライアントが要求したサーバー名を指定する HTTP(s) ヘッダーを送信する前に。

したがって、サーバーに複数のサイトの複数の証明書がある場合は、1つを無作為に選択し、それがクライアントが要求したサイトの証明書であることを望むかもしれません。無効な証明書が提供された場合、クライアントはその接続でサーバーが送信するすべてのコンテンツを信頼しないため、クライアントをリダイレクトできません。 「ちょっと待ってください。bortあなたの証明書はあなたの名前を証明します。lisaこれは間違いまたは悪い場合です。クライアントはサーバーに情報をリダイレクトする機会を与えません。」

名前ベースの仮想ホスティングが一般化するにつれて、この問題を解決するためにサーバー名を表示する(SNI)とサーバー代替名(SAN)という2つの技術が開発されました。

サーバー名マークは、HTTP(s)要求ヘッダーではなく、SSL / TLSネゴシエーションの初期段階でクライアントがサーバー名を通知できるようにするSSL / TLS拡張です。サーバーがSNIをサポートしている場合は、クライアントに提供する正しい証明書を選択できます。もちろん、各VirtualHostには独自の証明書が必要です。 Apacheの場合、これはその仮想ホストの証明書と一致する証明書を指す各仮想ホストのパラメータをSSLCertificateFile意味します。まだ証明書がない場合は、証明書を取得する必要があります。SSLCertificateKeyFileServerNamebort

別のオプションは、複数の仮想ホストの証明書を持つことです。これがサーバー代替名の技術が入ってくるところです。証明書が適用される複数のホスト名を一覧表示できるようにする証明書拡張。 SANリストlisa.example.combort.example.com有効なDNS名を証明書として使用するサーバーの新しい証明書を取得できます。もちろん、新しい証明書を取得するのは面倒です。

残念ながら、SNIとSANは後でSSL / TLS標準に追加されたため、最も古いブラウザは必ずしもサポートしていない可能性があります。しかし、基本的に、この10年間にリリースされたすべてのブラウザはこれをうまくサポートします。

おすすめ記事