ApacheのバーチャルホストでのSSL通信 [Linux]
以下は、この過程で得られた情報をまとめたものである。
(OS は CentOS、Web サーバーは Apache、SSL には OpenSSL を使用。)
1. 制限事項
(1) IP ベースのバーチャルホスト(注1) を使用する場合
IP アドレスを追加するため、NIC の追加が必要である。
(2) 名前ベースのバーチャルホスト(注2) を使用する場合
SNI(注3) に未対応の場合には、サーバー証明書をワイルドカード証明書にする必要がある。
(<hostname>.<domainname> ではなく、*.<domainname> を対象に証明書を作成する。)
(注1) IP ベースのバーチャルホスト
使用された IP アドレスにより対象のバーチャルホストを決定する方式。
(注2) 名前ベースのバーチャルホスト
HTTP ヘッダー内の Server Name により対象のバーチャルホストを決定する方式。
(注3) SNI: Server Name Indication
名前ベースのバーチャルホストの場合、バーチャルホストの判別を HTTP ヘッダーの情報をもとに行うため、SSL レベルでは対象となるバーチャルホストを特定できない。SNI とは、左記の状況でのバーチャルホストの特定を可能にする拡張仕様である。
なお、Apache、OpenSSL、Web ブラウザのすべてが SNI に対応しているかどうかが問題となる。
・Apache: ver 2.2.12 以降が SNI に対応している。
・OpenSSL: ver 0.9.8f 以降が SNI に対応している。
・Web ブラウザ: 使用するソフトウェア(Web ブラウザ)毎に対応状況が異なる。
2. 補足
(1) 名前ベースのバーチャルホスト(SNI 未対応) でのサーバー証明書の送信
HTTPS でいずれのサイト(バーチャルホスト上に構築)へアクセスしても、クライアントへ送信されるサーバー証明書は、最初に定義されているバーチャルホストのものである。
これは、サーバー証明書を送信する(SSL の仕様) 時点では HTTP ヘッダーの参照ができないため、対象となるバーチャルホストを特定できず、最初のバーチャルホストをデフォルト値として使用するためである。
3. 追記 (2013-06-19)
(1) 1 個の NIC への複数の IP アドレスの設定
1 個の NIC に複数の IP アドレスを設定することが可能である(IP エイリアスという機能を使用する)。この場合には、NIC の追加をせずに IP ベースのバーチャルホストを使用することが可能である。
コメント 0