Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

Server Name Indication

Матеріал з Вікіпедії — вільної енциклопедії.

Індикація імені сервера (англ.Server Name Indication,SNI) — розширення протоколуTLS[1], що надає можливість клієнтському комп'ютеру зазначати на початку процесу «рукотискання» (англ.handshaking), до якого іменіхосту ініціюється з'єднання.Це дозволяє серверові видавати більше ніж один публічнийсертифікат при використанні лише однієїIP-адреси іTCP порту, і таким чином надає можливість організації множиннихHTTPS-сайтів (або інших послуг через протокол TLS) на одній IP-адресі, кожен зі своїм сертифікатом.SNI концептуально еквівалентний механізмовівіртуального хостингу у HTTP/1.1.Ім'я хосту передається у незашифрованому вигляді, так що при перехопленні мережного потоку є можливість побачити, до якого імені здійснюється запит.

Опис проблеми

[ред. |ред. код]

Під час здійснення з'єднання з використаннямTLS, клієнт здійснює запит цифрового сертифікату вебсервера. Коли сертифікат отримано, клієнт порівнює ім'я (чи імена), закодоване у сертифікаті, з іменем хоста, до якого здійснюється з'єднання, і у випадку збігу продовжує роботу у нормальному режимі. Якщо збігу імен не виявлено, користувачеві як правило показується попередження, і з'єднання може бути перерване через можливість атаки«людина посередині». Втім, деякі програми дозволяють користувачеві обійти попередження; при цьому неявно вважається, що користувач довіряє сертифікатам, і як наслідок — встановленому з'єднанню.

Отримати заздалегідь повний список імен хостів може бути складно (або взагалі неможливо). Як наслідок, складно або неможливо отримати і сертифікат, який містить у собі всі ці імена. Серверові, що обслуговує запити для кількох імен хостів, бажано мати окремий сертифікат для кожного такого імені (або для групи взаємопов'язаних імен). Починаючи приблизно з 2005 року, організація CAcert у експериментальному порядку пропонувала кілька методів з використання TLS на віртуальних серверах,[2] більшість з яких вважалися недостатньо опрацьованими чи непрактичними. Наприклад, розширення до протоколуX.509 під назвою Subject Alternative Name (SAN) дозволяє розмістити у одному сертифікаті інформацію про кілька доменів (тобто, імен), що керуються однією особою[3]. Такі «уніфіковані» сертифікати мають бути оновлені кожного разу, коли список доменів змінюється.

Механізм віртуального хостингу дозволяє HTTP-серверові видавати різний контент в залежності від того, до якого домену було звернення (при цьому сервер має лише одну IP-адресу). Це є можливим через те, що ім'я передається клієнтом як частина HTTP-заголовку. Але у випадку HTTPS, рукостискання протоколу TLS відбуваєтьсядо того, як сервер приймає будь-які заголовки HTTP. Таким чином, сервер не може знати, який сертифікат видавати у відповідь.

SNI як вирішення проблеми

[ред. |ред. код]

Розширення SNI дозволяє вирішити дану проблему шляхом додавання імені хоста (домену) до протоколу TLS-рукотискання.[4] Сервер, знаючи, до якого саме домену буде запит, може таким чином надіслати сертифікат лише для цього домену.

ОрганізаціяIETF додала SNI до своїх «запитів коментарів» (RFC). ДокументRFC 3546 (червень 2003) має назву «Transport Layer Security (TLS) Extensions». Найбільш свіжа версія стандарту (станом на початок 2018 року) —RFC 6066.

Реалізація

[ред. |ред. код]

Патч, що додає підтримку TLS/SNI до пакетуOpenSSL, з'явився 2004 року, у рамках проекту EdelKey.[5] За два роки його було портовано до гілки розробників OpenSSL, а у 2007-му — портовано до OpenSSL 0.9.8 (вперше з'явився у складі 0.9.8f[6]).

Для підтримки SNI застосунком це розширення має бути реалізоване у бібліотеці TLS, нові функції якої приймають доменне ім'я, до якого буде здійснено запит.

Підтримка

[ред. |ред. код]
ПрограмаТипПідтримкаПриміткиПідтримується з
Internet ExplorerБраузерТакПочинаючи з версії 7 для ОСWindows Vista (не підтримується на XP)2006
Mozilla FirefoxБраузерТакЗ версії 2.02006
cURLІнструмент командного рядка, бібліотекаТакЗ версії 7.18.12008
SafariБраузерТакНе підтримується уWindows XP
Google ChromeБраузерТакЗ версії 6.0[7]2010
BlackBerry 10БраузерТакПідтримується у всіх версіях BB102013
BlackBerry OSБраузерНіНе підтримується у версії 7.1 і старіших
elinksБраузерНіНе підтримується у версії 0.12pre6 і старіших
Windows MobileБраузерТакНевдовзі після версії 6.5
Android default browserБраузерТакHoneycomb (3.x) для планшетів і Ice Cream Sandwich (4.x) для смартфонів2011
Firefox for AndroidБраузерЧастковоПідтримується для базового перегляду, Sync і інші сервіси не підтримують SNI[8][9]
wgetІнструмент командного рядкаТакЗ версії 1.142012
Nokia Browser for SymbianБраузерНі
Opera Mobile for SymbianБраузерНіНе підтримується у ОС Series60
IBM HTTP ServerВебсерверТакЗ версії 9.0.0[10][11]
Apache TomcatВебсерверТакНе підтримується до версії 8.5 (бекпорт з 9)
Apache HTTP ServerВебсерверТакЗ версії 2.2.122009
Microsoft IISВебсерверТакЗ версії 82012
nginxВебсерверТакЗ версії 0.5.232007
JettyВебсерверТакЗ версії 9.3.02015
QtБібліотекаТакЗ версії 4.82011
MozillaNSS server sideБібліотекаНі[12]
4th DimensionБібліотекаНіНе підтримується у версії 15.2 і раніше
JavaБібліотекаТакЗ версії 1.72011
ColdFusion /LuceeБібліотекаТакColdFusion з версії 10 Update 18 і 11 Update 7; Lucee з версії 4.5.1.019, версія 5.0.0.502015
ErlangБібліотекаТакЗ версії r172013
GoБібліотекаТакЗ версії 1.42011
PerlБібліотекаТакПочинаючи зNet::SSLeay версії 1.50 іIO::Socket::SSL версії 1.562012
PHPБібліотекаТакЗ версії 5.32014
PythonБібліотекаТакЗ версій 2.7.9 і 3.2 (у модуляхssl,urllib[2] іhttplib)2011 для Python 3.x; 2014 для Python 2.x
RubyБібліотекаТакЗ версії 2.0 (у модуліnet/http)2011

Джерела

[ред. |ред. код]
  1. Server Name Indication.Transport Layer Security (TLS) Extensions.IETF. p. 8. sec. 3.1.doi:10.17487/RFC3546.RFC3546.
  2. CAcert VHostTaskForce.CAcert Wiki. Архіворигіналу за 22 серпня 2009. Процитовано 14 квітня 2018.
  3. What is a Multiple Domain (UCC) SSL Certificate?.Go Daddy. Архіворигіналу за 6 лютого 2015. Процитовано 14 квітня 2018.
  4. TLS Server Name Indication.Paul's Journal. Архіворигіналу за 12 серпня 2016. Процитовано 14 квітня 2018.
  5. EdelKey Project. Архіворигіналу за 4 квітня 2016. Процитовано 14 квітня 2018.
  6. OpenSSL CHANGES. Архіворигіналу за 20 квітня 2016.[Архівовано 2016-04-20 уWayback Machine.]
  7. IIS 8 and IIS 8.5 SNI Browser Support. DigiCert. Архіворигіналу за 5 вересня 2015. Процитовано 31 грудня 2015.
  8. Bug 765064 — HttpClient in use by Sync and other services doesn't support SNI.Bugzilla@Mozilla. 29 жовтня 2017. Архіворигіналу за 21 вересня 2017. Процитовано 9 листопада 2017.
  9. Bug 1412650 — Switch services.* code to use HttpsURLConnection.Bugzilla@Mozilla. 29 жовтня 2017. Архіворигіналу за 10 листопада 2017. Процитовано 9 листопада 2017.
  10. IBM HTTP Server SSL Questions and Answers.IBM. Архіворигіналу за 13 січня 2016. Процитовано 8 березня 2011.
  11. IHS 8 powered by Apache 2.2.x ?.IBM. 17 жовтня 2013. Архіворигіналу за 26 грудня 2015. Процитовано 9 листопада 2017.
  12. Bug 360421 — Implement TLS Server Name Indication for servers.Bugzilla@Mozilla. 11 листопада 2006. Архіворигіналу за 12 червня 2014. Процитовано 30 жовтня 2012.
Протоколи та технології
Інфраструктура
публічних ключів
Див. також
Історія
Імплементації
Notaries
Уразливості
Теорія
Шифр
Протокол
Імплементація
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Server_Name_Indication&oldid=45730787
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2025 Movatter.jp