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
Описание
-
Определить интерфейсы для выбора конкретного менеджера ключей и менеджера доверия для конкретного указания имени сервера.
В инфраструктуре виртуального хостинга, т. е. когда несколько серверов размещены на одной платформе с одним и тем же IP-адресом и разными именами хостов, разные серверы должны использовать разные менеджеры ключей и менеджеры доверия.
-
Добавить возможность передавать соединение виртуальной машине в соответствии с конкретным указанием имени сервера.
В инфраструктуре виртуальных машин, т. е. когда разные серверы размещены в разных виртуальных машинах с разными именами хостов, но с одним и тем же IP-адресом хоста, хост должен иметь возможность передавать соединение SSL/TLS целевой виртуальной машине в соответствии с конкретным указанием имени сервера.
Альтернативы
Чтобы решить проблемы TLS в вычислительной среде Java, многим интернет-провайдерам приходится назначать отдельный новый IP-адрес каждому серверу TLS/HTTPS или переходить на другие реализации TLS в качестве прокси.
Тестирование
- Нужно проверить, что новые интерфейсы ведут себя так, как ожидается.
- Нужно проверить, что реализация неожиданным образом не нарушает обратную совместимость.
- Нужно проверить, что реализация неожиданным образом не создаёт новых проблем совместимости с другими системами.
- Нужно проверить, что нет значительного влияния на производительность, даже когда сервер работает в режиме передачи соединений для поддержки виртуальных машин.
Влияние
- JCP: не влияет на JCP
- Другие компоненты JDK: не влияет на другие компоненты JDK
- Совместимость: минимальное
- Безопасность: не влияет на безопасность
- Переносимость: ограниченное влияние на переносимость
- Пользовательский интерфейс: графического пользовательского интерфейса нет
- Документация: нужно задокументировать новые интерфейсы
- Интернационализация: минимальное влияние, вероятно, будут добавлены новые сообщения об ошибках
- Локализация: минимальное влияние, вероятно, будут добавлены новые сообщения об ошибках
- Правовые вопросы: правовых проблем нет
- Прочее: другого влияния не известно