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

JEP 332: Transport Layer Security (TLS) 1.3

Протокол Transport Layer Security (TLS) версии 1.3

АвторXue-Lei Fan
ОтветственныйXuelei Fan
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск11
Компонентsecurity-libs / javax.net.ssl
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьXL
ДлительностьXL
РецензентыAndrew Gross, Brian Goetz, Sean Mullan
ОдобренBrian Goetz
Создан2015/12/12 05:26
Обновлён2018/09/17 19:03
Задача8145252

Аннотация

Реализовать версию 1.3 протокола Transport Layer Security (TLS) RFC 8446.

Что не является целью

Поддержка версии 1.3 протокола Datagram Transport Layer Security (DTLS) не является целью. Также не является целью поддержка всех возможностей TLS 1.3; подробнее о том, что будет реализовано, см. раздел «Описание».

Мотивация

TLS 1.3 — это масштабная переработка протокола TLS, которая значительно улучшает безопасность и производительность по сравнению с предыдущими версиями. Уже доступно несколько ранних реализаций от других поставщиков. Нам нужно поддерживать TLS 1.3, чтобы оставаться конкурентоспособными и не отставать от последнего стандарта.

Описание

TLS 1.3 — новая версия TLS, которая заменяет предыдущие версии TLS, включая версию 1.2 (RFC 5246), и делает их устаревшими. Она также делает устаревшими или изменяет другие возможности TLS, такие как расширения OCSP stapling (RFC 6066, RFC 6961), а также расширение session hash и extended master secret (RFC 7627).

Java Secure Socket Extension (JSSE) в JDK предоставляет фреймворк и реализацию протоколов SSL, TLS и DTLS на Java. Сейчас API JSSE и реализация в JDK поддерживают SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, DTLS 1.0 и DTLS 1.2.

Основная цель этого JEP — минимальная реализация TLS 1.3, совместимая с другими реализациями и с предыдущими версиями. Минимальная реализация должна поддерживать:

  • Согласование версии протокола
  • Полное рукопожатие TLS 1.3
  • Возобновление сеанса TLS 1.3
  • Обновление ключа и вектора инициализации (IV) в TLS 1.3
  • Обновлённый механизм OCSP stapling в TLS 1.3
  • Режим обратной совместимости TLS 1.3
  • Обязательные расширения и алгоритмы TLS 1.3
  • Алгоритмы подписи RSASSA-PSS (8146293)

Для минимальной реализации новые публичные API не требуются. Требуются следующие новые стандартные имена алгоритмов:

  • Имя версии протокола TLS: TLSv1.3
  • Имя алгоритма javax.net.ssl.SSLContext: TLSv1.3
  • Имена наборов шифров TLS для TLS 1.3: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384.

Кроме того, наборы шифров KRB5 будут удалены из JDK, так как они больше не считаются безопасными.

Параллельно с этим JEP мы разработаем поддержку криптографических алгоритмов для следующих необязательных возможностей TLS 1.3:

  • Наборы шифров ChaCha20/Poly1305 (8140466)
  • Алгоритмы на эллиптических кривых X25519/X448 (8171279)
  • Алгоритмы подписи edDSA (8166596)

Эти возможности могут быть включены в этот JEP, если позволит время; в противном случае они будут запланированы и интегрированы как отдельные возможности.

Следующие значимые возможности в рамках этого JEP реализованы не будут:

  • Данные 0-RTT
  • Аутентификация после рукопожатия
  • Метки времени подписанных сертификатов (SCT): RFC 6962

TLS 1.3 не имеет прямой совместимости с предыдущими версиями. Хотя TLS 1.3 можно реализовать с режимом обратной совместимости, при использовании этого режима есть несколько рисков, связанных с совместимостью:

  • TLS 1.3 использует политику полузакрытия (half-close), а TLS 1.2 и более ранние версии — политику дуплексного закрытия (duplex-close). У приложений, которые зависят от политики дуплексного закрытия, при переходе на TLS 1.3 могут возникнуть проблемы совместимости.

  • Расширение signature_algorithms_cert требует, чтобы для аутентификации сертификатов использовались заранее определённые алгоритмы подписи. Однако на практике приложение может использовать неподдерживаемые алгоритмы подписи.

  • Алгоритм подписи DSA в TLS 1.3 не поддерживается. Если сервер настроен на использование только сертификатов DSA, он не сможет перейти на TLS 1.3.

  • Набор поддерживаемых наборов шифров в TLS 1.3 отличается от TLS 1.2 и более ранних версий. Если в приложении жёстко заданы наборы шифров, которые больше не поддерживаются, оно может оказаться неспособным использовать TLS 1.3 без изменения кода приложения.

Чтобы свести к минимуму риск несовместимости, эта реализация TLS 1.3 будет реализовывать режим обратной совместимости и включать его по умолчанию. При желании приложение может отключить режим обратной совместимости, а также включить или отключить TLS 1.3.

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

Будут разработаны или доработаны тесты для проверки следующих общих требований:

  • Убедиться, что изменения не влияют на совместимость (D)TLS 1.2 и более ранних версий.
  • Убедиться, что реализация не нарушает обратную совместимость неожиданным образом.
  • Убедиться, что реализация не вызывает неожиданных проблем совместимости с другими реализациями.
  • Убедиться, что нет значительного влияния на производительность.
  • Убедиться, что реализация как в режиме клиента, так и в режиме сервера взаимодействует с другими реализациями TLS 1.3.

Риски и допущения

Для тестирования совместимости нужна сторонняя реализация TLS 1.3, поддерживающая этот RFC.

Зависимости

TLS 1.3 требует поддержки алгоритмов подписи RSASSA-PSS (8146293).