にほんブログ村
まず、ウェブサーバーなどで使われているバーチャルホストという技術が、どのようなものなのかを知っておく必要があります。
通常はWebサーバやメールサーバを運用するのにドメインの数以上のサーバコンピュータが必要となる。バーチャルホストを利用すると1つのサーバコンピュータで複数のドメインを運用することができ、サーバコンピュータの数を減らし運用のコストを下げることができる。また、後述する名前ベースバーチャルホストの場合はIPアドレスも節約することができる。 また、ドメインの追加も容易で、小規模Webサイトの運営や安価なレンタルサーバサービスなどでの利用が盛んである。
ウィキペディア
SSL/TLS では「同じサーバーは 1つの SSL サーバ証明書しか使えない」のが基本です。
ただ、このままだと不便な場合もあります。例えばレンタルサーバサービスをしているとしましょう。同じサーバを複数のユーザが利用し、更にユーザーごとに異なるドメインを利用するという使い方ができなければ、レンタルサーバーのサービスは成り立ちません。
このために出てきたのが、バーチャルホストです。
バーチャルホストの種類
今時のウェブサーバーでは、1台で複数の ウェブサービスを提供することが当たり前になっています。この技術をバーチャルホストと呼びます。
バーチャルホストには 2種類があります。
- IP ベース
- 名前ベース
IP アドレスが複数必要のない名前ベースのバーチャルホストの方が主流ですが、実際は、両方を混在させて使うケースもあります。
名前ベースのバーチャルホストの設定例
IP アドレスは同じで、複数のウェブサイト(ドメイン)を提供するのが特徴です。
# Ensure that Apache listens on port 80
Listen 80
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/kkint1
ServerName www.kkinternational.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/kkint2
ServerName www.kkinternational.work
# Other directives here</VirtualHost>
IP ベースのバーチャルホストの設定例
ウェブサイト(ドメイン)毎に、異なる IP アドレスを使うのが特徴です。
Listen 80
<VirtualHost 172.30.30.100>
DocumentRoot /www/kkint1
ServerName www.kkinternational.com
</VirtualHost>
<VirtualHost 172.30.30.200>
DocumentRoot /www/kkint2
ServerName www.kkinternational.work
</VirtualHost>
なぜ SNI が必要なのか
このバーチャルホスト(特に名前ベースの方)が使われ始めたのが理由です。
名前ベースのバーチャルホストには、
- 同じ IP アドレスで、複数のウェブサービス(ドメイン)を提供する
- それらのウェブサービスは HTTPS を使っていて、サーバー証明書で暗号化されている(現在は HTTPS がほぼ必須)
という特徴があります。
上記 1の特徴から、バーチャルホストを使うウェブサーバーは、「家」よりも「アパートの建物」に似ていると言えます。アパートは、複数の部屋に分かれています。これらの部屋が、ウェブサービスでありドメインです。
次に上記 2の特徴です。この「HTTPS でサーバー証明書を使っている」というところがポイントです。基本的な SSL/TLS の仕様では、サーバー証明書は、同じ IP アドレスにつき 1ドメインしか運用できません。
上記1と2の特徴を考えると、複数のドメイン名をホストするため、IP アドレスだけでは、ユーザーが到達しようとしているドメインを示すのに十分ではありません。
なぜなら、間違った SSL 証明書を表示する可能性があり、HTTPS 接続ができなかったり、または終了されたりしてしまうというケースが発生する訳です。
じゃあ SNI があると?
Server Name Indication(SNI)は、この問題を解決するために作られました。
SNI は、HTTPS で使用される TLS プロトコルの拡張機能として提供されています。
TLS/SSL ハンドシェークに含まれていて、クライアント PC が、到達しようとしている ウェブサイトの正しい SSL 証明書を確認することができるようにします。
Server Name Indication(SNI、サーバー ネーム インディケーション、サーバ名表示)は、SSL/TLSの拡張仕様の一つである。SSLハンドシェイク時にクライアントがアクセスしたいホスト名を伝えることで、サーバ側がグローバルIPごとではなくホスト名によって異なる証明書を使い分けることを可能にする。
ウィキペディア
SNI を利用すると、クライアント PC は SSL/TLS ハンドシェイクの際に「これから通信したいサーバのドメイン名」をサーバに通知します。ウェブサーバーは「どのドメインに対応するサーバ証明書を利用すべきか」を、判断することができるようになります。
これにより、接続したいウェブサービスに必要なサーバー証明書が入手できるという訳です。
SNI をサポートしてないウェブブラウザー
SNI はクライアント側(ブラウザー)で、この機能をサポートしていないといけない訳ですが、古いブラウザーですと SNI をサポートしていません。
- Windows XP 以前の全ブラウザ
- IE 6 以前
- いわゆる「ガラケー」のブラウザ
まあ、こんな古い環境でインターネットのブラウジングをしている人もいないと思いますが。
SNI をサポートしているブラウザーの一覧はこちら
SNI をサポートしているウェブサーバー
- Apache 2.2.12 以降 + mod_ssl もしくは mod_gnutls
- Apache Traffic Server(英語版) 3.2.0 以降
- Cherokee(英語版) (コンパイル時 TLS サポートを有効にした場合)
- lighttpd 1.4.24 以降(それ以前の1.4.xはパッチ)
- Nginx と OpenSSL
- F5 ネットワークス Local Traffic Manager 11.1 およびそれ以降
- Hiawtha(英語版) 8.6 またはそれ以降
- IBM HTTP Server 9.0 およびそれ以降
- LiteSpeed 4.1 およびそれ以降
- Pound 2.6 以降
- Apache Tomcat (Java 7 およびそれ以降)
- Microsoft IIS 8
- PageKite tunneling reverse proxy
- Citrix NetScaler 9.3 以降
- Radware Alteon ADC (AlteonOS 28.1 以降)
関連するブログ:
- AWS を学ぶ(20)AWS Certificate Manager を使ってみる
- Linux の基本コマンドが変更されて困った
- オンライン証明書作成ツール
- モバイル PC で SaaS の快適アクセス
- パケットキャプチャーからサーバー証明書を抜き出す方法
- LPIC を学ぶ(1) lsof コマンドについて
- Server Name Indication (SNI) とは
- Linux の Cron の基本的な使い方
- Linux で iSCSI イニシエーター設定 (Ubuntu 編)
最近の人気ブログ TOP 10:
- 夢の国で起きた悲劇 ~ディズニーリゾートで心中した一家~
- 新潟県六日町トンネル内灯油焼殺事件 ~16歳と19歳の恋愛に嫉妬した三十路の暴力団組員~
- 知られざる女子高生コンクリ詰め殺人発覚当時の報道(後編)
- 仙台アルバイト女性集団暴行殺人
- 犬鳴峠リンチ焼殺事件 ~超凶悪少年犯罪~
- 浜田省吾 – 聖地巡礼情報 –
- 浜田省吾ファンからの広島旅行のおすすめ
- 未成年に踏みにじられた25歳の純情 ―実録・おやじ狩り被害―
- R40「城東工業高校のテル」はいま
- 高崎山の王・ベンツ ~ミスターニホンザルの生涯~
最近の記事:
- 列島を凍り付かせた未成年たちの凶行5~ 1988年・名古屋アベック殺人事件~第五話
- 列島を凍り付かせた未成年たちの凶行4~ 1988年・名古屋アベック殺人事件~第四話
- 列島を凍り付かせた未成年たちの凶行3~ 1988年・名古屋アベック殺人事件~第三話
- 列島を凍り付かせた未成年たちの凶行2~ 1988年・名古屋アベック殺人事件~第二話
- 列島を凍り付かせた未成年たちの凶行~ 1988年・名古屋アベック殺人事件~ 第一話
- 最近の推し新人アーティスト
- 1990年・ドラクエ Ⅳ 放火事件 ~ドラクエ熱で焼けた家~
- 目指せ!暴力団構成員 ~1973年・現役ヤクザが熱血指導!~ “暴力団組員養成塾”
- Linux で iSCSI イニシエーター設定 (Ubuntu 編)
- 1954年・日光参道で修学旅行生同士が乱闘 ~広島県立山陽高校vs.青森市立第一高校~