(Translated by https://www.hiragana.jp/)
Server Name Indication - Wikipedia コンテンツにスキップ

Server Name Indication

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

Server Name IndicationSNI、サーバー ネーム インディケーション、サーバめい表示ひょうじ)は、SSL/TLS拡張かくちょう仕様しようひとつである。SSLハンドシェイクにクライアントがアクセスしたいホストめいつたえることで、サーバがわグローバルIPごとではなくホストめいによってことなる証明しょうめいしょ使つかけることを可能かのうにする。

SNIはとくに、HTTP 1.1名前なまえベースバーチャルホストHTTPS対応たいおうさせるために使つかわれる。SNIを機能きのうさせるには、Webサーバがわブラウザがわ両面りょうめん対応たいおう必要ひつようである。SNIを実装じっそうしないブラウザではすべてのホストめいおなじサーバ証明しょうめいしょ使つかわれるため、警告けいこく表示ひょうじされることがある。2016ねん時点じてんでPC・モバイルの主要しゅようなブラウザで問題もんだいなく利用りようできる状況じょうきょうである。

問題もんだい背景はいけい[編集へんしゅう]

SSL/TLS接続せつぞくのはじめに、クライアントはSSL/TLSのサーバから(サーバとCAの)証明しょうめいしょり、証明しょうめいしょかいざんされていないことなどを確認かくにんする。サーバ証明しょうめいしょにはホストめいかれており、それがこん接続せつぞくしようとしているホストめい一致いっちすることをクライアントは確認かくにんする。そうでない場合ばあい、なりすましやちゅうあいだしゃ攻撃こうげきおそれがあるため、クライアントはユーザに警告けいこくをする。ユーザの責任せきにん証明しょうめいしょ信用しんようし、警告けいこく迂回うかいすることができるアプリケーションも存在そんざいする。

HTTPの場合ばあい名前なまえベースバーチャルホスト使つかうと、複数ふくすうのホストめい同一どういつのドメインであれ、ことなるドメインであれ)を単一たんいつのサーバと単一たんいつグローバルIP運用うんようできる。これは、ブラウザがわHTTPヘッダによって希望きぼうのホストめい指定していすることではたらく。しかし、HTTPS場合ばあいHTTP要求ようきゅうをやりとりするまえにSSL/TLSハンドシェイクをおこな必要ひつようがある。このため、ブラウザがどのホストを訪問ほうもんするかを、ハンドシェイク時点じてんでサーバがわには予測よそくできず、HTTPヘッダのホストめいによってふくすうまいのサーバ証明しょうめいしょ使つかけることができない。したがって、単一たんいつのサーバでふくすうまいのサーバ証明しょうめいしょ使つかけるには名前なまえベースバーチャルホストは利用りようできず、ホストめいごとにことなるグローバルIPを使つか必要ひつようがあった(IPベースバーチャルホスト)。

この問題もんだいへの対処たいしょ方法ほうほうとして、1まいのサーバ証明しょうめいしょ複数ふくすうのホストめい指定していする手段しゅだんられていた。X.509 v3の証明しょうめいしょ導入どうにゅうされたsubjectAltName拡張かくちょう利用りようすることで、追加ついかのホストめい指定していできる。通常つうじょう主体しゅたいしゃのCommon Name属性ぞくせい同様どうよう、こちらでもワイルドカード使つかえる。しかし、じつ運用うんようにおいてサーバの運用うんようするすべてのホストめいあらかじCSRふくめておくことは現実げんじつてきではなく、ホスト(ワイルドカードの場合ばあい、ドメイン)めいえるたびに別々べつべつにサーバ証明しょうめいしょ導入どうにゅうすることがおおい。2005ねんから、CAcertはTLSをバーチャルホスト使つか方法ほうほうについて様々さまざま実験じっけんおこなった[1]が、おおくは実用じつようてきなものだった。たとえば、subjectAltName拡張かくちょう使つかって運用うんようするぜんドメインのホストめいを1まいのサーバ証明しょうめいしょ集約しゅうやくし、ドメインがえたりドメインめいわったりするごとに取得しゅとくしなおすという方法ほうほう[2]提案ていあんされた。

これらの事情じじょうによって、複数ふくすうのサーバ証明しょうめいしょ使つかけたいサーバは、単数たんすうまたは少数しょうすうのホストめいをIPべつ運用うんようすることが要求ようきゅうされる。ホスト(ワイルドカードの場合ばあい、ドメイン)ごとにべつのグローバルIPを取得しゅとくすることはコストがかかる(IPアドレス枯渇こかつ問題もんだい)ため、おおくのWebサイトにはHTTPS通信つうしん利用りようはハードルがたかかった。

SNIによる解決かいけつ[編集へんしゅう]

Server Name Indication(SNI)では、TLS拡張かくちょうくわえることでこの問題もんだい対処たいしょする。TLSのハンドシェイク手続てつづきで、HTTPSクライアントが希望きぼうするドメインめいつたえる(この部分ぶぶん平文へいぶんとなる)[3]。それによってサーバが対応たいおうするドメインめいしるした証明しょうめいしょ使つかうことが可能かのうになる。サーバとクライアントがともにSNIに対応たいおうしていれば、ひとつのIPで複数ふくすうのドメインにHTTPSサーバを提供ていきょうすることが可能かのうになる。

SNIは2003ねん6がつRFC 3546「TLS拡張かくちょう仕様しよう」にくわわった。その更新こうしんされ、2014ねん1がつ現在げんざい、SNIの記述きじゅつのある最新さいしん仕様しようRFC 6066 (日本語にほんごやく) である。

SNIの暗号あんごう[編集へんしゅう]

SNIも暗号あんごうする方法ほうほう検討けんとうされている。当初とうしょ、Encrypted SNI (ESNI)が検討けんとうされていたものの、そのEncrypted Client Hello (ECH)が考案こうあんされ、標準ひょうじゅんけた検討けんとうすすめられている[4]

対応たいおうじょうきょう[編集へんしゅう]

SNIに対応たいおうするには、アプリケーションの使つかSSLライブラリがホストめい仕組しくみが必要ひつようである。OS機能きのう利用りようしてSSL通信つうしんおこなうアプリケーションでは、OSのSSL機能きのうがSNIをサポートしない場合ばあいはSNIを使つかうことはできない。2011ねん時点じてんでほとんどのブラウザやSSLライブラリはSNIを実装じっそうしたが、ユーザの使つかうOSとのわせによってはSNIを利用りようできない場合ばあいがしばしばある。

対応たいおうソフト[編集へんしゅう]

2004ねんに、OpenSSLTLS/SNIをサポートするパッチがEdelKeyプロジェクトによって作成さくせいされた[5]。このパッチは2006ねん開発かいはつブランチにまれ、2007ねんOpenSSL 0.9.8にポートされた。

TLS/SNIをサポートするブラウザ[6]
Webサーバ
ライブラリ
  • Mozilla NSS 3.11.1[28] client-side only
  • OpenSSL
    • 0.9.8f (released 11 Oct 2007) - '--enable-tlsext' オプションを明示めいじてき指定していする必要ひつようがある
    • 0.9.8j (released 07 Jan 2009) through 1.0.0 (released 29 March 2010) - デフォルトで対応たいおう
  • GnuTLS[29]
  • wolfSSL (デフォルトでは無効むこうだが '--enable-sni' or '--enable-tlsx' オプションにより利用りよう可能かのう)[30]
  • PolarSSL英語えいごばん 1.2.0およびそれ以降いこう (デフォルトで有効ゆうこう)
  • libcurl / cURL 7.18.1 (30 Mar 2008)
  • Python 3.2 (ssl, urllib[2] and httplib モジュール) [31]
  • Qt 4.8[32]
  • Oracle Java 7 JSSE [33]
  • Apache HttpComponents 4.3.2 [34]
  • wget 1.14[35] (1.14以前いぜんはパッチによる[36]
  • Android 2.3 (Gingerbread) (ただし部分ぶぶんてきHttpsURLConnection クラスを使つかった場合ばあいかぎ対応たいおう)[37]
  • Android 3.0 (Honeycomb) [38]
  • IO::Socket::SSL (Perl/CPANモジュール, 1.83以降いこう[39])
  • Pike 7.9.5 (SSL module) [40]

対応たいおうソフト[編集へんしゅう]

以下いかわせのソフトウェアはSNIに対応たいおうしていない。

クライアント
  • Internet Explorer 6 もしくはWindows XP以前いぜんでのぜんバージョン
  • Safari (Windows XPうえ)
  • BlackBerry ブラウザ (7.1またはそれ以前いぜん)
  • Windows Mobile 6.5[41]
  • Android 2.x のブラウザ[42] (Honeycomb for tablets と Ice Cream Sandwich for phones では対応たいおう)
  • wget 1.14未満みまん (パッチによって対応たいおう)
サーバ
ライブラリ
  • Qt 4.7[32]
  • Mozilla Network Security Services server side [43]
  • Java 1.6 およびそれ以前いぜん [33]
  • Apache HttpComponents 4.3.1 およびそれ以前いぜん [34]
  • Python 2.x (ssl, urllib[2], httplib モジュール) [31]
  • PhantomJS 1.x

脚注きゃくちゅう[編集へんしゅう]

  1. ^ CAcert VHostTaskForce”. CAcert Wiki. 2012ねん8がつ26にち閲覧えつらん
  2. ^ What is a Multiple Domain (UCC) SSL Certificate?”. 2012ねん8がつ26にち閲覧えつらん
  3. ^ TLS Server Name Indication”. Paul's Journal. 2012ねん8がつ26にち閲覧えつらん
  4. ^ Patton, Christopher (2020ねん12月8にち). “Good-bye ESNI, hello ECH!”. 2022ねん8がつ6にち閲覧えつらん
  5. ^ EdelKey Project”. 2012ねん8がつ26にち閲覧えつらん
  6. ^ Brand, Kaspar (2009ねん3がつ29にち). “TLS SNI Test Site”. 2012ねん8がつ26にち閲覧えつらん
  7. ^ Understanding Certificate Name Mismatches” (2009ねん12月7にち). 2013ねん7がつ8にち閲覧えつらん
  8. ^ Opera (2005ねん2がつ25にち). “Changelog for Opera [8] Beta 2 for Windows” (via Archive.org). Opera Changelogs for Windows. Opera.com. 2005ねん11月23にち時点じてんオリジナルよりアーカイブ。2013ねん7がつ19にち閲覧えつらん。 “Readded experimental support for TLS Extensions and TLS 1.1. Setting is disabled by default.”
  9. ^ Google Chrome, Issue 43142, Use SSLClientSocketNSS on Windows by default” (2010-10-29 - Although many report Chrome 8 does not work with SNI on XP and Win7). 2012ねん8がつ26にち閲覧えつらん
  10. ^ Kehrer, Paul. “SNI in iOS 4.0”. 2010ねん11月22にち閲覧えつらん
  11. ^ Bug 122433: Server Name Identification support”. Bugs.kde.org. 2011ねん7がつ18にち閲覧えつらん
  12. ^ Issue 12908 - android Https - websites that support Server Name Indication (SNI) don't work”. code.google.com. 2011ねん8がつ23にち閲覧えつらん
  13. ^ Bug 34607: Support for Server Name Indication”. Apache Software Foundation. 2012ねん8がつ26にち閲覧えつらん
  14. ^ Revision 776281: adding support for Server Name Indication to the Apache 2.2.x branch”. Apache Software Foundation. 2012ねん8がつ26にち閲覧えつらん
  15. ^ CHANGES: Server Name Indication support is listed under the changes for Apache 2.2.12”. Apache Software Foundation. 2012ねん8がつ26にち閲覧えつらん
  16. ^ Notaras, George (2007ねん8がつ10日とおか). “SSL-enabled Name-based Apache Virtual Hosts with mod_gnutls”. 2012ねん8がつ26にち閲覧えつらん
  17. ^ 1.4.24 - now with TLS SNI and money back guarantee”. Blog.lighttpd.net. 2011ねん3がつ8にち閲覧えつらん
  18. ^ #386 (TLS servername extension (SNI) for namebased TLS-vhosts)”. Trac.lighttpd.net. 2011ねん3がつ8にち閲覧えつらん
  19. ^ sol13452: Configuring a virtual server to serve multiple HTTPS sites using TLS Server Name Indication (SNI) feature”. ask.f5.com. 2012ねん3がつ26にち閲覧えつらん
  20. ^ IBM HTTP Server SSL Questions and Answers”. Publib.boulder.ibm.com. 2011ねん3がつ8にち閲覧えつらん
  21. ^ IHS 8 powered by Apache 2.2.x ?”. Publib.boulder.ibm.com. 2011ねん3がつ8にち閲覧えつらん
  22. ^ Apsis Gmbh”. apsis.ch. 2011ねん8がつ18にち閲覧えつらん
  23. ^ What’s New in IIS 8”. weblogs.asp.net. 2012ねん4がつ1にち閲覧えつらん
  24. ^ Open Source PageKite”. PageKite.net. 2012ねん4がつ18にち閲覧えつらん
  25. ^ SSL/TLS back-ends, endpoints and SNI”. PageKite.net. 2012ねん4がつ18にち閲覧えつらん
  26. ^ Configuring an SSL Virtual Server for Secure Hosting of Multiple Sites”. Citrix. 2012ねん7がつ5にち閲覧えつらん
  27. ^ Introducing AlteonOS 28.1! - Knowledge Base - Radware”. kb.radware.com. 2012ねん8がつ20日はつか閲覧えつらん
  28. ^ NSS 3.11.1 Release Notes”. Mozilla.org. 2011ねん3がつ8にち閲覧えつらん
  29. ^ TLS Extensions”. Gnu.org (2010ねん8がつ1にち). 2011ねん3がつ8にち閲覧えつらん
  30. ^ Using Server Name Indication (SNI) with CyaSSL”. wolfSSL.com (2013ねん5がつ24にち). 2013ねん11月25にち閲覧えつらん
  31. ^ a b Support TLS SNI extension in ssl module”. Bugs.python.org. 2011ねん3がつ8にち閲覧えつらん
  32. ^ a b QTBUG-1352. It would be useful if QSslSocket supports TLS extensions such as Server Name Indication as per RFC 3546.”. Qt Bug Tracker. 2011ねん4がつ15にち閲覧えつらん
  33. ^ a b Java SE 7 Release Security Enhancements”. download.oracle.com. 2012ねん12月12にち閲覧えつらん
  34. ^ a b HttpComponents HttpClient 4.3.2 Released”. 2014ねん1がつ25にち閲覧えつらん
  35. ^ News: GNU wget 1.14 released”. GNU Wget (2012ねん10がつ19にち). 2013ねん7がつ19にち閲覧えつらん
  36. ^ Bugs: bug #26786, TLS SNI support”. GNU Wget (2010ねん10がつ29にち). 2012ねん8がつ26にち閲覧えつらん
  37. ^ Android’s HTTP Clients”. Google. 2012ねん8がつ3にち閲覧えつらん
  38. ^ Issue 12908: Https websites that support Server Name Indication (SNI) don't work”. Google. 2012ねん8がつ3にち閲覧えつらん
  39. ^ IO::Socket::SSL Changes file mentions introduction of SNI”. 2013ねん7がつ19にち閲覧えつらん
  40. ^ Pike's SSL module”. 2013ねん8がつ30にち閲覧えつらん
  41. ^ Understanding Certificate Name Mismatches”. Blogs.msdn.com. 2011ねん3がつ8にち閲覧えつらん
  42. ^ Android issue 1290 - Https websites that support Server Name Indication (SNI) don't work”. Code.google.com (2010ねん12月1にち). 2011ねん12月13にち閲覧えつらん
  43. ^ NSS Roadmap (as of 11 September 2009)”. Wiki.mozilla.org. 2011ねん3がつ8にち閲覧えつらん

関連かんれん項目こうもく[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]