SSブログ

ApacheのバーチャルホストでのSSL通信 [Linux]

Apache のバーチャルホストを使用して複数のサイトを構築し、SSL 通信を行う(サイト毎に別のサーバー証明書を使用) という要件があり、この対応を行った。
以下は、この過程で得られた情報をまとめたものである。
(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 ベースのバーチャルホストを使用することが可能である。



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。