Індикація імені сервера (англ. Server Name Indication, SNI) — розширення протоколу TLS, що надає можливість клієнтському комп'ютеру зазначати на початку процесу «рукотискання» (англ. handshaking), до якого імені хосту ініціюється з'єднання. Це дозволяє серверові видавати більше ніж один публічний сертифікат при використанні лише однієї IP-адреси і (TCP порту), і таким чином надає можливість організації множинних HTTPS-сайтів (або інших послуг через протокол TLS) на одній IP-адресі, кожен зі своїм сертифікатом. SNI концептуально еквівалентний механізмові віртуального хостингу у HTTP/1.1. Ім'я хосту передається у незашифрованому вигляді, так що при перехопленні мережного потоку є можливість побачити, до якого імені здійснюється запит.
Опис проблеми
Під час здійснення з'єднання з використанням TLS, клієнт здійснює запит цифрового сертифікату вебсервера. Коли сертифікат отримано, клієнт порівнює ім'я (чи імена), закодоване у сертифікаті, з іменем хоста, до якого здійснюється з'єднання, і у випадку збігу продовжує роботу у нормальному режимі. Якщо збігу імен не виявлено, користувачеві як правило показується попередження, і з'єднання може бути перерване через можливість атаки «man-in-the-middle». Втім, деякі програми дозволяють користувачеві обійти попередження; при цьому неявно вважається, що користувач довіряє сертифікатам, і як наслідок — встановленому з'єднанню.
Отримати заздалегідь повний список імен хостів може бути складно (або взагалі неможливо). Як наслідок, складно або неможливо отримати і сертифікат, який містить у собі всі ці імена. Серверові, що обслуговує запити для кількох імен хостів, бажано мати окремий сертифікат для кожного такого імені (або для групи взаємопов'язаних імен). Починаючи приблизно з 2005 року, організація CAcert у експериментальному порядку пропонувала кілька методів з використання TLS на віртуальних серверах, більшість з яких вважалися недостатньо опрацьованими чи непрактичними. Наприклад, розширення до протоколу X.509 під назвою Subject Alternative Name (SAN) дозволяє розмістити у одному сертифікаті інформацію про кілька доменів (тобто, імен), що керуються однією особою. Такі «уніфіковані» сертифікати мають бути оновлені кожного разу, коли список доменів змінюється.
Механізм віртуального хостингу дозволяє HTTP-серверові видавати різний контент в залежності від того, до якого домену було звернення (при цьому сервер має лише одну IP-адресу). Це є можливим через те, що ім'я передається клієнтом як частина HTTP-заголовку. Але у випадку HTTPS, рукотискання протоколу TLS відбувається до того, як сервер приймає будь-які заголовки HTTP. Таким чином, сервер не може знати, який сертифікат видавати у відповідь.
SNI як вирішення проблеми
Розширення SNI дозволяє вирішити дану проблему шляхом додавання імені хоста (домену) до протоколу TLS-рукотискання. Сервер, знаючи, до якого саме домену буде запит, може таким чином надіслати сертифікат лише для цього домену.
Організація IETF додала SNI до своїх «запитів коментарів» (RFC). Документ RFC 3546 (червень 2003) має назву «Transport Layer Security (TLS) Extensions». Найбільш свіжа версія стандарту (станом на початок 2018 року) — RFC 6066.
Реалізація
Патч, що додає підтримку TLS/SNI до пакету OpenSSL, з'явився 2004 року, у рамках проекту EdelKey. За два роки його було портовано до гілки розробників OpenSSL, а у 2007-му — портовано до OpenSSL 0.9.8 (вперше з'явився у складі 0.9.8f).
Для підтримки SNI застосунком це розширення має бути реалізоване у бібліотеці TLS, нові функції якої приймають доменне ім'я, до якого буде здійснено запит.
Підтримка
Програма | Тип | Підтримка | Примітки | Підтримується з |
---|---|---|---|---|
Internet Explorer | Браузер | Так | Починаючи з версії 7 для ОС Windows Vista (не підтримується на XP) | 2006 |
Mozilla Firefox | Браузер | Так | З версії 2.0 | 2006 |
cURL | Інструмент командного рядка, бібліотека | Так | З версії 7.18.1 | 2008 |
Safari | Браузер | Так | Не підтримується у Windows XP | |
Google Chrome | Браузер | Так | З версії 6.0 | 2010 |
BlackBerry 10 | Браузер | Так | Підтримується у всіх версіях BB10 | 2013 |
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 | |
wget | Інструмент командного рядка | Так | З версії 1.14 | 2012 |
Nokia Browser for Symbian | Браузер | Ні | ||
Opera Mobile for Symbian | Браузер | Ні | Не підтримується у ОС Series60 | |
Вебсервер | Так | З версії 9.0.0 | ||
Apache Tomcat | Вебсервер | Так | Не підтримується до версії 8.5 (бекпорт з 9) | |
Apache HTTP Server | Вебсервер | Так | З версії 2.2.12 | 2009 |
Microsoft IIS | Вебсервер | Так | З версії 8 | 2012 |
nginx | Вебсервер | Так | З версії 0.5.23 | 2007 |
Jetty | Вебсервер | Так | З версії 9.3.0 | 2015 |
Qt | Бібліотека | Так | З версії 4.8 | 2011 |
Mozilla NSS server side | Бібліотека | Ні | ||
Бібліотека | Ні | Не підтримується у версії 15.2 і раніше | ||
Java | Бібліотека | Так | З версії 1.7 | 2011 |
ColdFusion / | Бібліотека | Так | ColdFusion з версії 10 Update 18 і 11 Update 7; Lucee з версії 4.5.1.019, версія 5.0.0.50 | 2015 |
Erlang | Бібліотека | Так | З версії r17 | 2013 |
Go | Бібліотека | Так | З версії 1.4 | 2011 |
Perl | Бібліотека | Так | Починаючи з Net::SSLeay версії 1.50 і IO::Socket::SSL версії 1.56 | 2012 |
PHP | Бібліотека | Так | З версії 5.3 | 2014 |
Python | Бібліотека | Так | З версій 2.7.9 і 3.2 (у модулях ssl , urllib[2] і httplib ) | 2011 для Python 3.x; 2014 для Python 2.x |
Ruby | Бібліотека | Так | З версії 2.0 (у модулі net/http ) | 2011 |
Джерела
- [[[:Шаблон:Cite IETF/makelink]] Server Name Indication]. [[[:Шаблон:Cite IETF/makelink]] Transport Layer Security (TLS) Extensions]. IETF. p. 8. sec. 3.1. doi:10.17487/RFC3546. .
- . CAcert Wiki. Архів оригіналу за 22 серпня 2009. Процитовано 14 квітня 2018.
- . Go Daddy. Архів оригіналу за 6 лютого 2015. Процитовано 14 квітня 2018.
- . Paul's Journal. Архів оригіналу за 12 серпня 2016. Процитовано 14 квітня 2018.
- . Архів оригіналу за 4 квітня 2016. Процитовано 14 квітня 2018.
- . Архів оригіналу за 20 April 2016.
- . DigiCert. Архів оригіналу за 5 вересня 2015. Процитовано 31 грудня 2015.
- . Bugzilla@Mozilla. 29 жовтня 2017. Архів оригіналу за 21 вересня 2017. Процитовано 9 листопада 2017.
- . Bugzilla@Mozilla. 29 жовтня 2017. Архів оригіналу за 10 листопада 2017. Процитовано 9 листопада 2017.
- . IBM. Архів оригіналу за 13 січня 2016. Процитовано 8 березня 2011.
- . IBM. 17 жовтня 2013. Архів оригіналу за 26 December 2015. Процитовано 9 листопада 2017.
- . Bugzilla@Mozilla. 11 листопада 2006. Архів оригіналу за 12 червня 2014. Процитовано 30 жовтня 2012.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Indikaciya imeni servera angl Server Name Indication SNI rozshirennya protokolu TLS sho nadaye mozhlivist kliyentskomu komp yuteru zaznachati na pochatku procesu rukotiskannya angl handshaking do yakogo imeni hostu iniciyuyetsya z yednannya Ce dozvolyaye serverovi vidavati bilshe nizh odin publichnij sertifikat pri vikoristanni lishe odniyeyi IP adresi i TCP portu i takim chinom nadaye mozhlivist organizaciyi mnozhinnih HTTPS sajtiv abo inshih poslug cherez protokol TLS na odnij IP adresi kozhen zi svoyim sertifikatom SNI konceptualno ekvivalentnij mehanizmovi virtualnogo hostingu u HTTP 1 1 Im ya hostu peredayetsya u nezashifrovanomu viglyadi tak sho pri perehoplenni merezhnogo potoku ye mozhlivist pobachiti do yakogo imeni zdijsnyuyetsya zapit Opis problemiPid chas zdijsnennya z yednannya z vikoristannyam TLS kliyent zdijsnyuye zapit cifrovogo sertifikatu vebservera Koli sertifikat otrimano kliyent porivnyuye im ya chi imena zakodovane u sertifikati z imenem hosta do yakogo zdijsnyuyetsya z yednannya i u vipadku zbigu prodovzhuye robotu u normalnomu rezhimi Yaksho zbigu imen ne viyavleno koristuvachevi yak pravilo pokazuyetsya poperedzhennya i z yednannya mozhe buti perervane cherez mozhlivist ataki man in the middle Vtim deyaki programi dozvolyayut koristuvachevi obijti poperedzhennya pri comu neyavno vvazhayetsya sho koristuvach doviryaye sertifikatam i yak naslidok vstanovlenomu z yednannyu Otrimati zazdalegid povnij spisok imen hostiv mozhe buti skladno abo vzagali nemozhlivo Yak naslidok skladno abo nemozhlivo otrimati i sertifikat yakij mistit u sobi vsi ci imena Serverovi sho obslugovuye zapiti dlya kilkoh imen hostiv bazhano mati okremij sertifikat dlya kozhnogo takogo imeni abo dlya grupi vzayemopov yazanih imen Pochinayuchi priblizno z 2005 roku organizaciya CAcert u eksperimentalnomu poryadku proponuvala kilka metodiv z vikoristannya TLS na virtualnih serverah bilshist z yakih vvazhalisya nedostatno opracovanimi chi nepraktichnimi Napriklad rozshirennya do protokolu X 509 pid nazvoyu Subject Alternative Name SAN dozvolyaye rozmistiti u odnomu sertifikati informaciyu pro kilka domeniv tobto imen sho keruyutsya odniyeyu osoboyu Taki unifikovani sertifikati mayut buti onovleni kozhnogo razu koli spisok domeniv zminyuyetsya Mehanizm virtualnogo hostingu dozvolyaye HTTP serverovi vidavati riznij kontent v zalezhnosti vid togo do yakogo domenu bulo zvernennya pri comu server maye lishe odnu IP adresu Ce ye mozhlivim cherez te sho im ya peredayetsya kliyentom yak chastina HTTP zagolovku Ale u vipadku HTTPS rukotiskannya protokolu TLS vidbuvayetsya do togo yak server prijmaye bud yaki zagolovki HTTP Takim chinom server ne mozhe znati yakij sertifikat vidavati u vidpovid SNI yak virishennya problemiRozshirennya SNI dozvolyaye virishiti danu problemu shlyahom dodavannya imeni hosta domenu do protokolu TLS rukotiskannya Server znayuchi do yakogo same domenu bude zapit mozhe takim chinom nadislati sertifikat lishe dlya cogo domenu Organizaciya IETF dodala SNI do svoyih zapitiv komentariv RFC Dokument RFC 3546 cherven 2003 maye nazvu Transport Layer Security TLS Extensions Najbilsh svizha versiya standartu stanom na pochatok 2018 roku RFC 6066 RealizaciyaPatch sho dodaye pidtrimku TLS SNI do paketu OpenSSL z yavivsya 2004 roku u ramkah proektu EdelKey Za dva roki jogo bulo portovano do gilki rozrobnikiv OpenSSL a u 2007 mu portovano do OpenSSL 0 9 8 vpershe z yavivsya u skladi 0 9 8f Dlya pidtrimki SNI zastosunkom ce rozshirennya maye buti realizovane u biblioteci TLS novi funkciyi yakoyi prijmayut domenne im ya do yakogo bude zdijsneno zapit PidtrimkaPrograma Tip Pidtrimka Primitki Pidtrimuyetsya zInternet Explorer Brauzer Tak Pochinayuchi z versiyi 7 dlya OS Windows Vista ne pidtrimuyetsya na XP 2006Mozilla Firefox Brauzer Tak Z versiyi 2 0 2006cURL Instrument komandnogo ryadka biblioteka Tak Z versiyi 7 18 1 2008Safari Brauzer Tak Ne pidtrimuyetsya u Windows XPGoogle Chrome Brauzer Tak Z versiyi 6 0 2010BlackBerry 10 Brauzer Tak Pidtrimuyetsya u vsih versiyah BB10 2013BlackBerry OS Brauzer Ni Ne pidtrimuyetsya u versiyi 7 1 i starishihelinks Brauzer Ni Ne pidtrimuyetsya u versiyi 0 12pre6 i starishihWindows Mobile Brauzer Tak Nevdovzi pislya versiyi 6 5Android default browser Brauzer Tak Honeycomb 3 x dlya planshetiv i Ice Cream Sandwich 4 x dlya smartfoniv 2011Firefox for Android Brauzer Chastkovo Pidtrimuyetsya dlya bazovogo pereglyadu Sync i inshi servisi ne pidtrimuyut SNIwget Instrument komandnogo ryadka Tak Z versiyi 1 14 2012Nokia Browser for Symbian Brauzer NiOpera Mobile for Symbian Brauzer Ni Ne pidtrimuyetsya u OS Series60Vebserver Tak Z versiyi 9 0 0Apache Tomcat Vebserver Tak Ne pidtrimuyetsya do versiyi 8 5 bekport z 9 Apache HTTP Server Vebserver Tak Z versiyi 2 2 12 2009Microsoft IIS Vebserver Tak Z versiyi 8 2012nginx Vebserver Tak Z versiyi 0 5 23 2007Jetty Vebserver Tak Z versiyi 9 3 0 2015Qt Biblioteka Tak Z versiyi 4 8 2011Mozilla NSS server side Biblioteka NiBiblioteka Ni Ne pidtrimuyetsya u versiyi 15 2 i ranisheJava Biblioteka Tak Z versiyi 1 7 2011ColdFusion Biblioteka Tak ColdFusion z versiyi 10 Update 18 i 11 Update 7 Lucee z versiyi 4 5 1 019 versiya 5 0 0 50 2015Erlang Biblioteka Tak Z versiyi r17 2013Go Biblioteka Tak Z versiyi 1 4 2011Perl Biblioteka Tak Pochinayuchi z Net SSLeay versiyi 1 50 i IO Socket SSL versiyi 1 56 2012PHP Biblioteka Tak Z versiyi 5 3 2014Python Biblioteka Tak Z versij 2 7 9 i 3 2 u modulyah ssl urllib 2 i httplib 2011 dlya Python 3 x 2014 dlya Python 2 xRuby Biblioteka Tak Z versiyi 2 0 u moduli net http 2011Dzherela Shablon Cite IETF makelink Server Name Indication Shablon Cite IETF makelink Transport Layer Security TLS Extensions IETF p 8 sec 3 1 doi 10 17487 RFC3546 CAcert Wiki Arhiv originalu za 22 serpnya 2009 Procitovano 14 kvitnya 2018 Go Daddy Arhiv originalu za 6 lyutogo 2015 Procitovano 14 kvitnya 2018 Paul s Journal Arhiv originalu za 12 serpnya 2016 Procitovano 14 kvitnya 2018 Arhiv originalu za 4 kvitnya 2016 Procitovano 14 kvitnya 2018 Arhiv originalu za 20 April 2016 DigiCert Arhiv originalu za 5 veresnya 2015 Procitovano 31 grudnya 2015 Bugzilla Mozilla 29 zhovtnya 2017 Arhiv originalu za 21 veresnya 2017 Procitovano 9 listopada 2017 Bugzilla Mozilla 29 zhovtnya 2017 Arhiv originalu za 10 listopada 2017 Procitovano 9 listopada 2017 IBM Arhiv originalu za 13 sichnya 2016 Procitovano 8 bereznya 2011 IBM 17 zhovtnya 2013 Arhiv originalu za 26 December 2015 Procitovano 9 listopada 2017 Bugzilla Mozilla 11 listopada 2006 Arhiv originalu za 12 chervnya 2014 Procitovano 30 zhovtnya 2012