Индикация имени сервера - Server Name Indication

Индикация имени сервера (SNI) является продолжением Безопасность транспортного уровня (TLS) компьютер сетевой протокол по которому клиент указывает, какие имя хоста он пытается подключиться в начале процесса установления связи.[1] Это позволяет серверу представлять несколько сертификаты на том же айпи адрес и Порт TCP число и, следовательно, позволяет несколько безопасных (HTTPS ) веб-сайтов (или любых других оказание услуг через TLS), чтобы они обслуживались одним и тем же IP-адресом, не требуя, чтобы все эти сайты использовали один и тот же сертификат. Это концептуальный эквивалент HTTP / 1.1 на основе имен. виртуальный хостинг, но для HTTPS. Это также позволяет прокси-серверу перенаправлять клиентский трафик на нужный сервер во время установления связи TLS / SSL. Желаемое имя хоста не зашифровано в исходном расширении SNI, поэтому перехватчик может видеть, какой сайт запрашивается.

Предыстория проблемы

При создании TLS-соединения клиент запрашивает Цифровой сертификат с веб-сервера. После того, как сервер отправляет сертификат, клиент проверяет его и сравнивает имя, к которому он пытался подключиться, с именами, включенными в сертификат. В случае совпадения соединение продолжается в обычном режиме. Если совпадение не найдено, пользователь может быть предупрежден о несоответствии, и соединение может прерваться, поскольку несоответствие может указывать на попытку атака "человек посередине". Однако некоторые приложения позволяют пользователю обойти предупреждение, чтобы продолжить соединение, при этом пользователь берет на себя ответственность за доверие к сертификату и, соответственно, к соединению.

Однако может оказаться трудным - или даже невозможным из-за отсутствия заранее полного списка всех имен - получить единый сертификат, охватывающий все имена, за которые будет отвечать сервер. Серверу, который отвечает за несколько имен хостов, вероятно, потребуется предоставить разные сертификаты для каждого имени (или небольшой группы имен). С 2005 года CAcert проводит эксперименты по различным методам использования TLS на виртуальных серверах.[2] Большинство экспериментов неудовлетворительны и непрактичны. Например, можно использовать subjectAltName содержать несколько доменов, контролируемых одним человеком[3] в едином сертификате. Такие «сертификаты унифицированных коммуникаций» необходимо перевыпускать каждый раз при изменении списка доменов.

Виртуальный хостинг на основе имени позволяет размещать несколько имен хостов DNS на одном сервере (обычно веб-сервере) на одном IP-адресе. Для этого сервер использует имя хоста, представленное клиентом как часть протокола (для HTTP имя представлено в заголовок хоста ). Однако при использовании HTTPS квитирование TLS происходит до того, как сервер увидит какие-либо заголовки HTTP. Следовательно, сервер не мог использовать информацию в заголовке хоста HTTP, чтобы решить, какой сертификат представить, и поэтому только имена, охватываемые одним и тем же сертификатом, могли обслуживаться с одного и того же IP-адреса.

На практике это означало, что сервер HTTPS мог обслуживать только один домен (или небольшую группу доменов) на каждый IP-адрес для безопасного и эффективного просмотра. Назначение отдельного IP-адреса для каждого сайта увеличивает стоимость хостинга, поскольку запросы на IP-адреса должны быть обоснованы для региональный интернет-реестр и Адреса IPv4 исчерпаны. Для IPv6 это увеличивает административные издержки за счет наличия нескольких IP-адресов на одной машине, даже если адресное пространство не исчерпано. В результате многие веб-сайты были фактически лишены возможности использовать безопасную связь.

Технические принципы

SNI решает эту проблему, заставляя клиента отправлять имя виртуального домена как часть согласования TLS. Клиент привет сообщение.[4] Это позволяет серверу заранее выбрать правильный виртуальный домен и предоставить браузеру сертификат, содержащий правильное имя. Следовательно, с клиентами и серверами, реализующими SNI, сервер с одним IP-адресом может обслуживать группу доменных имен, для которых нецелесообразно получить общий сертификат.

SNI был добавлен в IETF с Интернет-RFC в июне 2003 г. RFC 3546, Расширения безопасности транспортного уровня (TLS). Последняя версия стандарта RFC 6066.

Последствия для безопасности

Полезные данные Server Name Indication не зашифрованы, поэтому имя хоста сервера, к которому пытается подключиться клиент, видно пассивному перехватчику. Эта слабость протокола использовалась программным обеспечением безопасности для фильтрации и мониторинга сети.[5][6][7] и правительства ввести цензуру.[8] В настоящее время существует несколько технологий, пытающихся зашифровать указание имени сервера.

Фронтинг домена

Фронтинг домена - это метод замены желаемого имени хоста в SNI на другое имя хоста, размещенное на том же сервере или, что более часто, в сети серверов, известной как сеть доставки контента. Когда клиент использует выход на домен, он заменяет домен сервера в SNI (незашифрованный), но оставляет его в заголовке хоста HTTP (который зашифрован TLS), чтобы сервер мог обслуживать правильный контент. Фронтинг домена нарушает стандарт, определяющий сам SNI, поэтому его совместимость ограничена (многие службы проверяют соответствие хоста SNI хосту заголовка HTTP и отклоняют соединения с SNI с выходом в домен как недействительные). Хотя раньше доменное имя использовалось во избежание государственной цензуры,[9] его популярность снизилась, потому что основные поставщики облачных услуг (Google, Amazon AWS и CloudFront) явно запрещают его в своих УО и имеют технические ограничения.[10]

Зашифрованный клиент Hello

Зашифрованный клиент Hello (ECH) - это расширение протокола TLS, которое обеспечивает шифрование всего сообщения Client Hello, которое отправляется на ранней стадии согласования TLS. ECH шифрует полезные данные с помощью открытого ключа, который проверяющей стороне (веб-браузеру) необходимо знать заранее, что означает, что ECH наиболее эффективен с большими CDN заранее известно производителям браузеров.

Первоначальная версия этого расширения 2018 года называлась Зашифрованный SNI (ESNI)[11] и его реализации развернуты в «экспериментальном» виде, чтобы снизить риск перехвата доменов.[12][13][14] В отличие от ECH, зашифрованный SNI зашифровал только SNI, а не все приветствие клиента.[15] Поддержка этой версии была включена в Firefox в октябре 2018 г.[16] и требовалось включить DNS-over-HTTPS.[17] Он был переработан в текущее расширение в марте 2020 года.

Краткое название - ECHO в марте 2020 года.[15] и был изменен на ECH в мае 2020 года.[18]

И ESNI, и ECH совместимы только с TLS 1.3, поскольку они полагаются на KeyShareEntry, который впервые был определен в TLS 1.3.[19]

В августе 2020 г. Великий китайский файрвол начал блокировать трафик ESNI, продолжая разрешать трафик ECH.[20]

В октябре 2020 года российские интернет-провайдеры, такие как Ростелеком и его мобильный оператор Tele2 начал блокировать трафик ESNI.[21]

Реализация

В 2004 году появился патч для добавления TLS / SNI в OpenSSL был создан проектом EdelKey.[22] В 2006 году этот патч был затем перенесен в ветвь разработки OpenSSL, а в 2007 году он был перенесен на OpenSSL 0.9.8 (впервые выпущен в версии 0.9.8f.[23]).

Чтобы прикладная программа реализовывала SNI, используемая ею библиотека TLS должна реализовывать его, а приложение должно передавать имя хоста в библиотеку TLS. Еще больше усложняет ситуацию то, что библиотека TLS может быть либо включена в прикладную программу, либо быть компонентом базовой операционной системы. Из-за этого некоторые браузеры реализуют SNI при работе в любой операционной системе, а другие реализуют его только при работе в определенных операционных системах.

Поддержка

Поддержка SNI[2]
Программного обеспеченияТипПоддерживаетсяЗаметкиПоддерживается с
Alpine (почтовый клиент)IMAP почтовый клиентдаНачиная с версии 2.22[24]2019-02-18
Internet Explorerвеб-браузердаНачиная с версии 7 в Vista (не поддерживается в XP)2006
Крайвеб-браузердаВсе версии
Mozilla Firefoxвеб-браузердаНачиная с версии 2.02006
cURLИнструмент и библиотека командной строкидаНачиная с версии 7.18.12008
Сафаривеб-браузердаНе поддерживается на Windows XP
Гугл Хромвеб-браузерда2010
BlackBerry 10веб-браузердаПоддерживается во всех выпусках BB102013
ОС BlackBerryвеб-браузерНе поддерживается в версии 7.1 или более ранней
Windows Mobileвеб-браузерЧерез некоторое время после 6.5
Android Браузер по умолчаниювеб-браузердаHoneycomb (3.x) для планшетов и Ice Cream Sandwich (4.x) для телефонов2011
Firefox для Androidвеб-браузерЧастичноеПоддерживается для просмотра. Синхронизация и другие службы не поддерживают SNI[25][26]
wgetИнструмент командной строкидаНачиная с версии 1.142012
Браузер Nokia для Symbianвеб-браузерНет
Opera Mobile для Symbianвеб-браузерНетНе поддерживается в Series60
Дилловеб-браузердаНачиная с версии 3.12016
IBM HTTP Serverвеб сервердаНачиная с версии 9.0.0[27][28]
Apache Tomcatвеб сервердаНе поддерживается до 8.5 (бэкпорт с 9)
HTTP-сервер Apacheвеб сервердаНачиная с версии 2.2.122009
Microsoft IISвеб сервердаНачиная с версии 82012
nginxвеб сервердаНачиная с версии 0.5.232007
Причалвеб сервердаНачиная с версии 9.3.02015
HCL Dominoвеб сервердаНачиная с версии 11.0.12020
QtБиблиотекадаНачиная с версии 4.82011
Mozilla НСС сторона сервераБиблиотекаНет[29]
4-е измерениеБиблиотекаНетНе поддерживается в версии 15.2 или более ранней.
ЯваБиблиотекадаНачиная с версии 1.72011
Холодный синтез / ЛюсиБиблиотекадаColdFusion с версии 10, обновление 18, 11, обновление 7, Lucee с версии 4.5.1.019, версия 5.0.0.502015
ErlangБиблиотекадаНачиная с версии r172013
ИдтиБиблиотекадаНачиная с версии 1.42011
PerlБиблиотекадапоскольку Net :: SSLeay версия 1.50 и IO :: Socket :: SSL версия 1.562012
PHPБиблиотекадаНачиная с версии 5.32014
PythonБиблиотекадаПоддерживается в 2.x из 2.7.9 и 3.x из 3.2 (в ssl, urllib [2] и httplib модули)2011 для Python 3.x и 2014 для Python 2.x
РубинБиблиотекадаНачиная с версии 2.0 (в net / http)2011
Гайаватавеб сервердаНачиная с версии 8.62012
lighttpdвеб сервердаНачиная с версии 1.4.242009

использованная литература

  1. ^ Блейк-Уилсон, Саймон; Нистром, Магнус; Хопвуд, Дэвид; Миккельсен, Ян; Райт, Тим (июнь 2003 г.). «Указание имени сервера». Расширения безопасности транспортного уровня (TLS). IETF. п. 8. сек. 3.1. Дои:10.17487 / RFC3546. ISSN  2070-1721. RFC 3546.
  2. ^ а б «CAcert VHostTaskForce». CAcert Вики. Архивировано из оригинал 22 августа 2009 г.. Получено 27 октября 2008.
  3. ^ "Что такое сертификат SSL для нескольких доменов (UCC)?". GoDaddy.
  4. ^ «Указание имени сервера TLS». Журнал Павла.
  5. ^ «Веб-фильтр: функция расширения SNI и блокировка HTTPS». www3.trustwave.com. Получено 20 февраля 2019.
  6. ^ «Sophos UTM: понимание веб-фильтрации Sophos». Сообщество Sophos. Получено 20 февраля 2019.
  7. ^ Крисмент, Изабель; Гойшо, Антуан; Холез, Тибо; Шбаир, Вазен М. (11 мая 2015 г.). «Эффективный обход фильтрации HTTPS на основе SNI». 2015 Международный симпозиум IFIP / IEEE по интегрированному управлению сетью (IM). С. 990–995. Дои:10.1109 / INM.2015.7140423. ISBN  978-1-4799-8241-7. S2CID  14963313.
  8. ^ «Южная Корея вводит цензуру в Интернете, отслеживая трафик SNI». КровотечениеКомпьютер. Получено 18 февраля 2019.
  9. ^ "Приложение для зашифрованного чата Signal обходит государственную цензуру". Engadget. Получено 4 января 2017.
  10. ^ «Amazon угрожает заблокировать аккаунт AWS Signal из-за обхода цензуры». Сигнал. Получено 2 мая 2018.
  11. ^ https://tools.ietf.org/html/draft-ietf-tls-esni
  12. ^ "ESNI: переход на HTTPS с целью защиты конфиденциальности". Блог EFF DeepLinks.
  13. ^ Клэберн, Томас (17 июля 2018 г.). "Не паникуйте по поводу фронтинга домена, исправление SNI взламывают". Реестр. Получено 10 октября 2018.
  14. ^ «Зашифруй или потеряй: как работает зашифрованный SNI». Блог Cloudflare. 24 сентября 2018 г.. Получено 13 мая 2019.
  15. ^ а б «ESNI -> ECHO · tlswg / draft-ietf-tls-esni».
  16. ^ Эрик, Рескорла. «Зашифрованный SNI приходит в Firefox каждую ночь». Блог о безопасности Mozilla. Получено 15 июн 2020.
  17. ^ Даниэль, Стенберг. "архив списка рассылки curl-library". curl.haxx.se. Получено 15 июн 2020.
  18. ^ "s / ECHO / ECH · tlswg / draft-ietf-tls-esni".
  19. ^ «Сделайте ESNI TLS 1.2 совместимым. · Проблема №38 · tlswg / draft-ietf-tls-esni». GitHub. Получено 9 августа 2020.
  20. ^ Чимпану, Каталин. «Китай сейчас блокирует весь зашифрованный HTTPS-трафик, использующий TLS 1.3 и ESNI». ZDNet. Получено 9 августа 2020.
  21. ^ «Почему Ростелеком блокирует ESNI трафик?». qna.habr.com (по-русски). 11 Октябрь 2020. Получено 30 октября 2020.
  22. ^ «Проект ЭдельКей». www.edelweb.fr. Получено 20 февраля 2019.
  23. ^ "ИЗМЕНЕНИЯ В OpenSSL". Архивировано из оригинал 20 апреля 2016 г.
  24. ^ https://repo.or.cz/alpine.git/commit/08fcd1b86979b422eb586e56459d6fe15333e500
  25. ^ «Ошибка 765064 - HttpClient, используемый Sync и другими службами, не поддерживает SNI». Bugzilla @ Mozilla. 29 октября 2017 г.. Получено 9 ноября 2017.
  26. ^ «Ошибка 1412650 - переключение служб. * Код для использования HttpsURLConnection». Bugzilla @ Mozilla. 29 октября 2017 г.. Получено 9 ноября 2017.
  27. ^ "IBM HTTP Server SSL Вопросы и ответы". IBM. Получено 8 марта 2011.
  28. ^ "IHS 8 на базе Apache 2.2.x?". IBM. 17 октября 2013 г. Архивировано с оригинал 26 декабря 2015 г.. Получено 9 ноября 2017.
  29. ^ «Ошибка 360421 - Реализовать указание имени сервера TLS для серверов». Bugzilla @ Mozilla. 11 ноября 2006 г.. Получено 30 октября 2012.

внешние ссылки