共用レンタルサーバーでも独自SSL対応が容易になる「SNI SSL」とは?

少し前まではWebサイトをSSL(SSL/TLS)対応とするには固定IPアドレス(グローバルIPアドレス)が必須でした。そのため、ほとんどのレンタルサーバーではSSL対応が有料オプションとなっています。

特に共用レンタルサーバーでは、IPアドレスを複数のユーザー(ドメイン)で共有しています。SSLサーバー証明書はIPアドレスに対して発行されるため、複数のドメインが紐付くIPアドレスには適用できません。

バーチャルホスト(Virtual Host)

1つのサーバー(IPアドレス)に複数のWebサイト(ドメイン)を同居可能とするために、 バーチャルホスト という技術が利用されています。

レンタルサーバー上のWebサイトへ ドメイン でのアクセスは可能ですが、そのドメインに対応する IPアドレス ではアクセスできません。1つのIPアドレスを複数のドメインで共有するため、どのドメイン(Webサイト)のコンテンツを返すべきかをサーバーが判断できないためです。

それでも、インターネットはIPアドレスを基に通信を行っています。どのようにして1つのIPアドレスで複数のWebサイトを運用しているのでしょうか?

これは、Yahoo!にアクセスしたときのHTTPヘッダの内容です。(例としては適切ではないかもしれません)

Webサーバーはヘッダの Host 名で、クライアント(Webブラウザ)に返すコンテンツを判断することができます。IPアドレスでアクセスすると、ヘッダのHost名もIPアドレスとなり、サーバーはどのWebサイトのコンテンツを返すべきか判断できません。

HTTPS通信

以前のSSL/TLSの仕様では、サーバーはデフォルトの(IPアドレスに紐付けされた)SSLサーバー証明書しか返すことができませんでした。そのため、SSL対応のWebサイトにはIPアドレスが必須だったわけです。

バーチャルホストと同じような仕組みを利用すれば、 HTTPS (SSL/TLS)でも対応できそうに思えます。しかし、以前の仕様ではクライアントとサーバーとの ハンドシェイク 時にドメイン名を渡せませんでした。

SSLサーバー証明書はハンドシェイク時に受け取るため、デフォルトの証明書で確立したSSLセッションでは、それ以外のドメインとのSSL通信ができないことになります。

  • ハンドシェイク
  • 握手 という意味ですが、クライアントとサーバー間で、通信に必要な設定をお互いに調整するための動作です。SSLであれば、暗号化方式などが決定されます。

SNI SSL

バーチャルホストでも容易にSSL対応が可能となったのは、SNI(Server Name Indication) SSLによります。SNIはSSL/TLSの拡張仕様であり、RFC6066に定義されています。

SNIではハンドシェイク時のフィールドに ServerName が追加されました。ServerNameのドメイン名により、通常のHTTPのようにサーバー側でドメイン(アクセス先)を判別できるようになりました。そのため、IPアドレスを共有する複数のドメインがあっても、適切にSSLサーバー証明書を返すことができます。

レンタルサーバーでも対応しつつあります

さくらインターネットではすでに対応しており、共用タイプの スタンダードプラン以上 から利用することが可能です。かなり古いWebブラウザが対応していない等の制限はありますが、レンタルサーバーでも気軽にSSLが利用できるのは嬉しいですね。他のレンタルサーバーも同じサービスを追加して欲しいと思います。

関連記事

BLOG

UPDATE