にほんブログ村
まず、ウェブサーバーなどで使われているバーチャルホストという技術が、どのようなものなのかを知っておく必要があります。
通常は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 の快適アクセス
- SSL証明書を簡単に取得する方法 – Wiresharkで証明書を抽出
- LPIC を学ぶ(1) lsof コマンドについて
- Server Name Indication (SNI) とは
- Linux の Cron の基本的な使い方と設定方法
- UbuntuとQNAPのiSCSI統合方法
- 複数の宛先に ping を打つことができる「fping」
最近の人気ブログ TOP 10:
- 夢の国で起きた悲劇 ~ディズニーリゾートで心中した一家~
- 新潟六日町のトンネル事件:恋愛に狂った暴力団員の極限の嫉妬
- 知られざる女子高生コンクリ詰め殺人発覚当時の報道(後編)
- 仙台アルバイト女性集団暴行殺人
- 犬鳴峠リンチ焼殺事件 ~超凶悪少年犯罪~
- 浜田省吾ファン必見の聖地巡礼訪問地リスト
- 広島の魅力: 浜田省吾ファン必見のスポット
- 未成年に踏みにじられた25歳の純情 ―実録・おやじ狩り被害―
- R40、テルの今:城東工業高校の伝説のその後
- 高崎山の王・ベンツ ~ミスターニホンザルの生涯~
最近の記事:
- 複数の宛先に ping を打つことができる「fping」
- ネイティブの英語 7 “A cup of joe”
- 死刑確定囚・野比のび太 – 第二十三話・昇華するのび太の鬱屈
- 死刑確定囚・野比のび太 – 第二十二話・静の怒りと武の苛立ち
- 死刑確定囚・野比のび太 – 第二十一話・夫婦間の亀裂とのび太の影響
- 死刑確定囚・野比のび太 – 第二十話・のび太の初出勤: 恐れと葛藤
- 死刑確定囚・野比のび太 – 第十九話・ジャイアンとのび太の絆
- 死刑確定囚・野比のび太 – 第十八話・引きこもりの息子と家族のジレンマ
- 死刑確定囚・野比のび太 – 第十七話・ドラえもんと30歳ののび太の葛藤
- 死刑確定囚・野比のび太 – 第十六話・剛田商店の成長と静香の貢献