openjdk.ruOpenJDK на русском

JEP 114: TLS Server Name Indication (SNI) Extension

Расширение TLS Server Name Indication (SNI)

ОтветственныйXuelei Fan
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск8
Компонентsecurity-libs / javax.net.ssl
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
ОдобренBrian Goetz
Создан2011/01/24 20:00
Обновлён2017/06/14 20:13
Задача8046104

Аннотация

Добавить поддержку расширения TLS Server Name Indication (SNI), чтобы обеспечить более гибкий защищённый виртуальный хостинг и инфраструктуру виртуальных машин на основе протоколов SSL/TLS.

Мотивация

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

Начиная с JDK 7, SunJSSE по умолчанию включает расширение SNI на стороне клиента. Нам нужно поддержать расширение SNI на стороне сервера в JDK 8, чтобы обеспечить виртуальный хостинг и рынок облачных вычислений.

Почти все основные браузеры поддерживают расширение SNI (по данным Википедии):

  • Internet Explorer 7 (Vista или выше, не XP) или новее
  • Mozilla Firefox 2.0 или новее
  • Opera 8.0 или новее (должен быть включён протокол TLS 1.1)
  • Opera Mobile как минимум версии 10.1 beta на Android
  • Google Chrome (Vista или выше. XP в Chrome 6 или новее OS X 10.5.7 или выше в Chrome 5.0.342.1 или новее)
  • Safari 2.1 или новее (Mac OS X 10.5.6 или выше и Windows Vista или выше)
  • MobileSafar в Apple iOS 4.0 или новее
  • Windows Phone 7
  • Maemo

Следующие веб-серверы поддерживают расширение SNI (по данным Википедии):

  • Apache 2.2.12 или новее с mod_ssl (или, как вариант, с экспериментальным mod_gnutls)
  • Cherokee, если он собран с поддержкой TLS
  • Lighttpd 1.4.x и 1.5.x
  • Nginx

Описание

  1. Определить интерфейсы для выбора конкретного менеджера ключей и менеджера доверия для конкретного указания имени сервера.

    В инфраструктуре виртуального хостинга, т. е. когда несколько серверов размещены на одной платформе с одним и тем же IP-адресом и разными именами хостов, разные серверы должны использовать разные менеджеры ключей и менеджеры доверия.

  2. Добавить возможность передавать соединение виртуальной машине в соответствии с конкретным указанием имени сервера.

    В инфраструктуре виртуальных машин, т. е. когда разные серверы размещены в разных виртуальных машинах с разными именами хостов, но с одним и тем же IP-адресом хоста, хост должен иметь возможность передавать соединение SSL/TLS целевой виртуальной машине в соответствии с конкретным указанием имени сервера.

Альтернативы

Чтобы решить проблемы TLS в вычислительной среде Java, многим интернет-провайдерам приходится назначать отдельный новый IP-адрес каждому серверу TLS/HTTPS или переходить на другие реализации TLS в качестве прокси.

Тестирование

  1. Нужно проверить, что новые интерфейсы ведут себя так, как ожидается.
  2. Нужно проверить, что реализация неожиданным образом не нарушает обратную совместимость.
  3. Нужно проверить, что реализация неожиданным образом не создаёт новых проблем совместимости с другими системами.
  4. Нужно проверить, что нет значительного влияния на производительность, даже когда сервер работает в режиме передачи соединений для поддержки виртуальных машин.

Влияние

  • JCP: не влияет на JCP
  • Другие компоненты JDK: не влияет на другие компоненты JDK
  • Совместимость: минимальное
  • Безопасность: не влияет на безопасность
  • Переносимость: ограниченное влияние на переносимость
  • Пользовательский интерфейс: графического пользовательского интерфейса нет
  • Документация: нужно задокументировать новые интерфейсы
  • Интернационализация: минимальное влияние, вероятно, будут добавлены новые сообщения об ошибках
  • Локализация: минимальное влияние, вероятно, будут добавлены новые сообщения об ошибках
  • Правовые вопросы: правовых проблем нет
  • Прочее: другого влияния не известно