Apache2で、IPアドレス1つで、2つのバーチャルホスト(以下)を運用してるとします。


www.example.com
www.example.org


この状況で、www.example.com のSSL証明書を使ってwww.example.comへのSSLアクセスを正しく処理しつつ、www.example.orgへのSSLアクセスは拒否する(証明書のホスト名が一致しないなどの警告ではなく、ホントに拒否。なんかエラーでもいい)、という設定は可能ですか? 可能ならどう書けばいいですか?

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2009/07/11 19:01:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント100pt

この状況で、www.example.com のSSL証明書を使ってwww.example.comへのSSLアクセスを正しく処理しつつ、www.example.orgへのSSLアクセスは拒否する(証明書のホスト名が一致しないなどの警告ではなく、ホントに拒否。なんかエラーでもいい)、という設定は可能ですか? 可能ならどう書けばいいですか?

不可能です。これは Apache 等の制約ではなく、SSLの仕組み上実現不可能なためです。


1つのIPアドレスで、ホスト名によってヴァーチャルホストを切り替える仕組みはNAMEベースのヴァーチャルホストと呼ばれます。

バーチャルホストによる複数サイトの同時運用(1/2)


この仕組みは HTTP のリクエストの中に、Host というヘッダ情報があり、これを見ることでウェブサーバーは対応する

ヴァーチャルホストを選択します。

Host は HTTP 1.1 からは必須のヘッダになっていますので、大抵のブラウザならこれで動作します。


しかし、SSLアクセスの場合仕組み上以下の順で動作します。

1.SSL 証明書に寄る暗号化経路の確率

2.HTTP に寄る通信(リクエスト・レスポンス)


つまり、SSL証明書のやりとりを行う段階では要求されている「ホスト名を知る手段がない」ので、

ホスト名によって挙動を変えることは出来無いのです。

ちなみに、Apache の場合、該当IPアドレスに割り当てられたヴァーチャルホストのうち、

最初に定義された物のSSL証明書を無条件で使用します。


以上の理由により、希望される動作を行うにはNAMEベースでは実現不可能で、

IPベースであれば実現可能と言うことになります。

id:sometime-amigo

さっそくの回答、ありがとうございます。

そんな気はしてました^^;

> Apache の場合、該当IPアドレスに割り当てられたヴァーチャルホストのうち、

最初に定義された物のSSL証明書を無条件で使用します

これが紛らわしいです・・・。

挙動からはどうもそうではないかと思いつつ、

そうはっきり書いてくれてる情報源があんまりないようですし。


おかげですっきりしました。

2009/07/11 19:00:58
  • id:b-wind
    >そうはっきり書いてくれてる情報源があんまりないようですし。
    http://httpd.apache.org/docs/2.0/ja/vhosts/name-based.html
    マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。

    一応書いてあるんですけどね。
    まぁわかりにくいですね。
  • id:sometime-amigo
    うぅ。わかりにくいです。
    b-windさんの回答はわかりやすかったですよー。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません