少し前まではWebサイトをSSL(SSL/TLS)対応とするには固定IPアドレス(グローバルIPアドレス)が必須でした。そのため、ほとんどのレンタルサーバーではSSL対応が有料オプションとなっています。
特に共用レンタルサーバーでは、IPアドレスを複数のユーザー(ドメイン)で共有しています。SSLサーバー証明書はIPアドレスに対して発行されるため、複数のドメインが紐付くIPアドレスには適用できません。
1つのサーバー(IPアドレス)に複数のWebサイト(ドメイン)を同居可能とするために、 バーチャルホスト という技術が利用されています。
レンタルサーバー上のWebサイトへ ドメイン でのアクセスは可能ですが、そのドメインに対応する IPアドレス ではアクセスできません。1つのIPアドレスを複数のドメインで共有するため、どのドメイン(Webサイト)のコンテンツを返すべきかをサーバーが判断できないためです。
それでも、インターネットはIPアドレスを基に通信を行っています。どのようにして1つのIPアドレスで複数のWebサイトを運用しているのでしょうか?
これは、Yahoo!にアクセスしたときのHTTPヘッダの内容です。(例としては適切ではないかもしれません)
Webサーバーはヘッダの Host 名で、クライアント(Webブラウザ)に返すコンテンツを判断することができます。IPアドレスでアクセスすると、ヘッダのHost名もIPアドレスとなり、サーバーはどのWebサイトのコンテンツを返すべきか判断できません。
以前のSSL/TLSの仕様では、サーバーはデフォルトの(IPアドレスに紐付けされた)SSLサーバー証明書しか返すことができませんでした。そのため、SSL対応のWebサイトにはIPアドレスが必須だったわけです。
バーチャルホストと同じような仕組みを利用すれば、 HTTPS (SSL/TLS)でも対応できそうに思えます。しかし、以前の仕様ではクライアントとサーバーとの ハンドシェイク 時にドメイン名を渡せませんでした。
SSLサーバー証明書はハンドシェイク時に受け取るため、デフォルトの証明書で確立したSSLセッションでは、それ以外のドメインとのSSL通信ができないことになります。
バーチャルホストでも容易にSSL対応が可能となったのは、SNI(Server Name Indication) SSLによります。SNIはSSL/TLSの拡張仕様であり、RFC6066に定義されています。
SNIではハンドシェイク時のフィールドに ServerName が追加されました。ServerNameのドメイン名により、通常のHTTPのようにサーバー側でドメイン(アクセス先)を判別できるようになりました。そのため、IPアドレスを共有する複数のドメインがあっても、適切にSSLサーバー証明書を返すことができます。
さくらインターネットではすでに対応しており、共用タイプの スタンダードプラン以上 から利用することが可能です。かなり古いWebブラウザが対応していない等の制限はありますが、レンタルサーバーでも気軽にSSLが利用できるのは嬉しいですね。他のレンタルサーバーも同じサービスを追加して欲しいと思います。