SNI(Server Name Indication)とは?
SNI(Server Name Indication)とは?複数のHTTPSサイトを1つのIPアドレスでホストする技術
はじめに
Webサイトを運営していると、複数のドメインを同じサーバーで管理する場面が増えてきました。しかし、HTTPS通信では、従来の方法では1つのIPアドレスに対して1つのSSL/TLSサーティフィケートしか割り当てられないという課題がありました。
この課題を解決するのが「SNI(Server Name Indication)」という技術です。本記事では、SNIの仕組みや実務での活用方法についてご紹介します。
SNIの基本概念
SNIは、TLS/SSL通信の初期段階で、クライアントがアクセスしたいドメイン名をサーバーに送信する仕組みです。
通常、HTTPSで通信を開始する際、TLSハンドシェイクが行われます。この過程で、サーバーはクライアントにSSL/TLSサーティフィケートを提示します。SNI導入以前は、この時点でサーバーはIPアドレスからしか判定できず、複数ドメインに対応する場合、追加のIPアドレスが必要でした。
SNIが登場することで、クライアントからのTLSハンドシェイク段階で「example.com」「sample.jp」といったドメイン情報が事前に送信されます。サーバーはこれを受け取り、該当するサーティフィケートを返す—これが実現できるようになったのです。
SNI導入のメリット
コスト削減
最大のメリットはIPアドレスの節約です。従来は複数ドメインでHTTPSを使う場合、各ドメインごとにIPアドレスが必要でした。SNIにより、1つのIPアドレスで複数のドメインをホストできるため、サーバーコストを大幅に削減できます。
運用の簡素化
複数ドメイン管理時の設定が単純化されます。わざわざIPアドレスを追加したり、DNSレコードを増やしたりする必要がなくなります。
実務での活用方法
Nginxの設定例
Nginxでは、SNIに対応した設定が比較的簡単です:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
# 設定省略
}
server {
listen 443 ssl;
server_name sample.jp;
ssl_certificate /etc/ssl/certs/sample.jp.crt;
ssl_certificate_key /etc/ssl/private/sample.jp.key;
# 設定省略
}
複数のserverブロックで異なるドメインと証明書を指定するだけで、SNIが自動的に機能します。
Apache HTTPDの設定例
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
</VirtualHost>
<VirtualHost *:443>
ServerName sample.jp
SSLEngine on
SSLCertificateFile /etc/ssl/certs/sample.jp.crt
SSLCertificateKeyFile /etc/ssl/private/sample.jp.key
</VirtualHost>
Apacheでも同様に複数のVirtualHostで対応できます。
注意点とベストプラクティス
ブラウザ互換性
SNIはほぼ全てのモダンブラウザで対応していますが、古いAndroidデバイス(4.1以下)やInternet Explorer 8以前では対応していません。ユーザー層によっては考慮が必要です。
ワイルドカードサーティフィケートの活用
複数のサブドメインを管理する場合、ワイルドカード証明書(*.example.com)の利用も検討するとよいでしょう。SNIと組み合わせることで、さらに柔軟な構成が可能になります。
まとめ
SNIはHTTPS時代の必須技術であり、複数ドメイン運用時のコスト削減と運用効率化を実現します。既に多くのレンタルサーバーやクラウドサービスが対応しており、新規プロジェクトではSNI対応が標準となっています。
特にマイクロサービス構成やマルチテナント環境では、SNIの活用が重要な要素になってきます。まだ導入していない方は、この機会に検討してみてはいかがでしょうか。