SNI とは
仮想ホストを使用すると、複数のドメイン名で 1 つの IP アドレスを共有できるため、IPv4 アドレス不足の解消に役立ちます。サーバーは、クライアントリクエスト内の host に基づいて、異なるドメイン名 (仮想ホスト) へのリクエストを振り分けます。
これにより、1 つの IP アドレスで複数のドメイン名をホストする HTTPS サーバーでは問題が発生します。TLS ハンドシェイクが完了する前は、サーバーはクライアントが要求しているドメイン名を認識できないため、対象の仮想ホストに対して正しい証明書を提示できません。
SNI (Server Name Indication) は、TLS ハンドシェイク中にクライアントが対象のドメイン名を指定することによって、この問題を解決します。サーバーはその後、正しい証明書を選択してハンドシェイクを完了し、TLS 接続を確立します。
SNI は 2004 年に初めて提案されました。現在では、ほとんどの最新ブラウザ、サーバー、テストツールが SNI をサポートしています。
Anti-DDoS Proxy と Web Application Firewall (WAF) がクライアントに SNI のサポートを求める理由
Anti-DDoS Proxy と Web Application Firewall (WAF) は、HTTPS サービスのリバースプロキシとして動作します。HTTPS 保護を設定する際は、サーバー証明書と秘密鍵をアップロードする必要があります。Anti-DDoS Proxy の IP アドレス数と WAF サーバー数には限りがあるため、サービスクラスターでは同一サーバー上で複数のドメイン名をホストします。そのため、Anti-DDoS Proxy および WAF と通信するには、クライアントが SNI をサポートする必要があります。
解決策
[サーバー側]
サーバーが SNI をサポートするように設定してください。
[クライアント側]
- ユーザーに、Google Chrome や Firefox などの最新ブラウザに切り替えるよう案内してください。
- Anti-DDoS Proxy サービスでレイヤー 7 の Web サイト保護を設定しないでください。代わりに、レイヤー 4 ポートフォワーディングを使用して Web サイト保護を設定してください。説明 レイヤー 4 のポート保護では CC 攻撃を防御できません。
- サポートされているデスクトップブラウザ:
- Chrome 5 以降
- Chrome 6 以降
- Firefox 2 以降
- Internet Explorer 7 以降 (Windows Vista、Windows Server 2008 以降の OS のみ。Windows XP 上の Internet Explorer はどのバージョンも SNI をサポートしていません。)
- Konqueror 4.7 以降
- Opera 8 以降
- Safari 3.0 以降 (Windows Vista、Windows Server 2008 以降、または Mac OS X 10.5.6 以降のみ。)
- サポートされているモバイルブラウザ:
- Android 3.0 Honeycomb 以降
- iOS 4 以降
- Windows Phone 7 以降
- サポートされているサーバー:
- Apache 2.2.12 以降
- Apache Traffic Server 3.2.0 以降
- Cherokee
- HAProxy 1.5 以降
- IIS 8.0 以降
- Lighttpd 1.4.24 以降
- LiteSpeed 4.1 以降
- Nginx 0.5.32 以降
- サポートされているコマンドラインツール:
- cURL 7.18.1 以降
- wget 1.14 以降
- サポートされているライブラリ:
- GNU TLS
- JSSE (Oracle Java) 7 以降 (クライアントとしてのみ)
- libcurl 7.18.1 以降
- NSS 3.1.1 以降
- OpenSSL 0.9.8f 以降 (バージョン 0.9.8j より前のバージョンではフラグの設定が必要です)
- OpenSSL 0.9.8f 以降(フラグ設定が必要)
- Qt 4.8 以降