Индикация имени сервера

редактировать
Расширение TLS для обслуживания нескольких сайтов HTTPS на одном IP-адресе с разными сертификатами

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

Содержание
  • 1 Предпосылки проблемы
  • 2 Технические принципы
  • 3 Последствия для безопасности
    • 3.1 Фронтинг домена
    • 3.2 Зашифрованный клиент Hello
  • 4 Реализация
  • 5 Поддержка
  • 6 Ссылки
  • 7 Внешние ссылки
Предыстория проблемы

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

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

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

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

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

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

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

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

Полезная нагрузка указания имени сервера не зашифрована, поэтому имя хоста сервера, к которому пытается подключиться клиент, видно пассивному перехватчику. Эта слабость протокола использовалась программным обеспечением безопасности для фильтрации и мониторинга сети, а также правительствами для введения цензуры. В настоящее время существует несколько технологий, пытающихся зашифровать указание имени сервера.

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

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

Зашифрованный клиент Здравствуйте.

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

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

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

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

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

Реализация

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

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

Поддержка
Поддержка SNI
Программное обеспечениеТипПоддерживаетсяПримечанияПоддерживается с
Alpine (почтовый клиент) IMAP почтовый клиент ДаНачиная с версии 2.222019-02-18
Internet Explorer Веб-браузерДаНачиная с версии 7 в Vista (не поддерживается в XP)2006
Edge Веб-браузерДаВсе версии
Mozilla Firefox Веб-браузерДаНачиная с версии 2.02006
cURL Инструмент командной строки и библиотекаДаНачиная с версии 7.18.12008
Safari Веб-браузерДаНе поддерживается в Windows XP
Google Chrome Веб-браузерДа2010
BlackBerry 10 Веб-браузерДаПоддерживается во всех выпусках BB102013
BlackBerry OS Веб-браузерНе поддерживается в 7.1 или более ранних версиях
Windows Mobile Веб-браузерЧерез некоторое время после 6.5
Android браузер по умолчаниюпросмотр веб-страниц rДаHoneycomb (3.x) для планшетов и Ice Cream Sandwich (4.x) для телефонов2011
Firefox для Android Интернет браузерЧастичноПоддерживается для просмотра. Синхронизация и другие службы не поддерживают SNI
wget Инструмент командной строкиДаНачиная с версии 1.142012
Nokia Browser для Symbian Веб-браузерNo
Opera Mobile для Symbian Веб-браузерNoНе поддерживается в Series60
Dillo Веб-браузерДаНачиная с версии 3.12016
IBM HTTP Server Веб-серверДаНачиная с версии 9.0.0
Apache Tomcat Веб-серверДаНе поддерживается до 8.5 (обратный порт с 9)
HTTP-сервер Apache Веб-серверДаНачиная с версии 2.2.122009
Microsoft IIS Веб-серверДаНачиная с версии 82012
nginx Веб-серверДаНачиная с версии 0.5.232007
Jetty Веб-серверДаНачиная с версии 9.3.02015
HCL Domino Веб-серверДаНачиная с версии 11.0.12020
Qt БиблиотекаДаНачиная с версии 4.82011
Сервер Mozilla NSS сторонаБиблиотекаNo
4-е измерение БиблиотекаNoНе поддерживается в 15.2 или более ранних версиях
Java БиблиотекаДаНачиная с версии 1.72011
ColdFusion / Lucee БиблиотекаДаColdFusion с версии 10 с обновлением 18, 11 с обновлением 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.x с 2.7.9 и 3.x с 3.2 (в ssl, urllib [2]и httplibmodules)2011 для Python 3.x и 2014 для Python 2.x
Ruby БиблиотекаДаНачиная с версии 2.0 (в net / http)2011
Hiawatha Веб-серверДа sНачиная с версии 8.62012
lighttpd Веб-серверДаНачиная с версии 1.4.242009
Ссылки
Внешние ссылки

Последняя правка сделана 2021-06-08 01:22:48
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте