web-dev-qa-db-ja.com

Apache:ポート80と443を書き換えます-複数のSSLvhostsセットアップ

設定:

  • 複数のSSLドメインは、異なるポート番号(Apacheがリッスンする)のvhostを使用して、単一のIP上に構成されます
  • Windows2003上のApache2.2.8(このplsに関するコメントはありません)
  • windows XPユーザーが多すぎるため、SNIはまだオプションではありません

このアプローチを使用するのが間違っている理由があるかもしれませんが、今のところは機能します。

vhostsのセットアップ:

# secure domain 1
<VirtualHost IP:443>
  SSL stuff specifying certificate etc.
  ServerName domain1.org
</VirtualHost>

# secure domain 2
<VirtualHost IP:81>
  SSL stuff for domain2.org
  ServerName domain2.org
</VirtualHost>

GOAL: domain2.orgdocroot内の一部のフォルダーは安全である必要があります。 .htaccessファイルを使用して、ポート81でURLをhttpsに書き換えました。

RewriteEngine On
RewriteCond %{SERVER_PORT} !^81$
RewriteRule (.*) https://%{HTTP_Host}:81%{REQUEST_URI} [R]

.htaccessをフォルダ 'secfolder'に置いたとします。
http://domain2.org/secfolderにアクセスすると、これは正常にhttps://domain2.org:81/secfolderに書き換えられます。


ISSUE:https://domain2.org/secfolder(ポート81なし)にアクセスすると、最初の仮想ホスト(domain1.org)からの証明書が使用され、証明書が無効であるためにサイトが安全でないとブラウザが文句を言いますdomain2.orgの場合。

RewriteCond %{SERVER_PORT} !^81$https://domain2.orghttps://domain2.org:81に書き換えると思いましたしかしそうではありません。この場合、.htaccessファイルはまったく使用されていないようです。

現時点ではわかりませんRewriteRuleを適用する方法https://domain2.orgに。 domain1.org用の仮想ホストの前にポート443でdomain2用の追加の仮想ホストを作成しようとしましたが、Apacheはそれを窒息させているようです。あなたの誰かがこれにアプローチする方法を知っていることを願っています。 TIA。


編集:削除された回答がありましたが、それは言った:
「最初に証明書を確認せずにサーバーに接続することはできません。また、証明書が間違ったドメイン用であるため、リダイレクトできません。」証明書の不一致は本当に行の終わりですか?その後、強制的なリダイレクト/ URLの書き換えはできませんか?

2
Benjamin Jung

https://domain2.org (実際には https://domain2.org:44 )へのHTTPS接続を行う場合、順序を覚えておいてください。大まかに

  1. ブラウザがポート443でIPへの接続を開きます
  2. Apacheは、IP:443の組み合わせに一致するVirtualHostを探します
  3. この場合、domain1.orgのVirtualHostが見つかります
  4. Apacheは、そのVirtualHostに関連付けられたSSL証明書(つまり、domain1.orgの証明書)を送信します
  5. [SSLネゴシエーションの残りの部分]
  6. ブラウザは、Host:ヘッダーを含むHTTPリクエストヘッダーを送信して、Apacheに通信していると思われるドメインを通知します。
  7. 該当する場合、HTTPリクエストヘッダーのmod_rewrite処理はここで行われます。

つまり、Apacheが送信する証明書を決定するとき、mod_rewriteがリダイレクトを実行するために使用する情報をまだ受信していません。

これを回避するには、両方のドメインで有効な単一の証明書が必要です。これは、ワイルドカード証明書(状況がdomain1.example.comおよびdomain2.example.comの場合、*。example.comの証明書を取得する)のいずれかである可能性があります。 「domain1.org」のSubjectを使用して、SSL証明書を取得しようとしますが、Subject代替名「domain2.org」の。

いずれの場合も、メインのApache構成ファイルでリダイレクトを行う必要があります-domain2.orgのDocumentRootの.htaccessファイルにある場合、domain1.orgのVirtualHostを使用するリクエストは別のDocumentRootディレクトリに移動します。ファイルを見ることはありません。

2
meulop

ある種のワイルドカード証明書を持っていますか、それとも同じIP上で異なるSSL証明書を使用して異なるドメインをホストしようとしていますか?

ワイルドカードでない場合は、どのポートにあるかに関係なく、IPアドレスごとに1つのSSL証明書しか使用できないため、それを行うことはできません。

0
solefald