www.example.com
www.example.org
この状況で、www.example.com のSSL証明書を使ってwww.example.comへのSSLアクセスを正しく処理しつつ、www.example.orgへのSSLアクセスは拒否する(証明書のホスト名が一致しないなどの警告ではなく、ホントに拒否。なんかエラーでもいい)、という設定は可能ですか? 可能ならどう書けばいいですか?
この状況で、www.example.com のSSL証明書を使ってwww.example.comへのSSLアクセスを正しく処理しつつ、www.example.orgへのSSLアクセスは拒否する(証明書のホスト名が一致しないなどの警告ではなく、ホントに拒否。なんかエラーでもいい)、という設定は可能ですか? 可能ならどう書けばいいですか?
不可能です。これは Apache 等の制約ではなく、SSLの仕組み上実現不可能なためです。
1つのIPアドレスで、ホスト名によってヴァーチャルホストを切り替える仕組みはNAMEベースのヴァーチャルホストと呼ばれます。
この仕組みは HTTP のリクエストの中に、Host というヘッダ情報があり、これを見ることでウェブサーバーは対応する
ヴァーチャルホストを選択します。
Host は HTTP 1.1 からは必須のヘッダになっていますので、大抵のブラウザならこれで動作します。
しかし、SSLアクセスの場合仕組み上以下の順で動作します。
1.SSL 証明書に寄る暗号化経路の確率
2.HTTP に寄る通信(リクエスト・レスポンス)
つまり、SSL証明書のやりとりを行う段階では要求されている「ホスト名を知る手段がない」ので、
ホスト名によって挙動を変えることは出来無いのです。
ちなみに、Apache の場合、該当IPアドレスに割り当てられたヴァーチャルホストのうち、
最初に定義された物のSSL証明書を無条件で使用します。
以上の理由により、希望される動作を行うにはNAMEベースでは実現不可能で、
IPベースであれば実現可能と言うことになります。
さっそくの回答、ありがとうございます。
そんな気はしてました^^;
> Apache の場合、該当IPアドレスに割り当てられたヴァーチャルホストのうち、
最初に定義された物のSSL証明書を無条件で使用します
これが紛らわしいです・・・。
挙動からはどうもそうではないかと思いつつ、
そうはっきり書いてくれてる情報源があんまりないようですし。
おかげですっきりしました。