JEP 219: Datagram Transport Layer Security (DTLS)
Протокол безопасности транспортного уровня для датаграмм (DTLS)
| Автор | Xue-Lei Fan |
| Ответственный | Xuelei Fan |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 9 |
| Компонент | security-libs / javax.net.ssl |
| Обсуждение | security dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | L |
| Рецензенты | Brian Goetz, Sean Mullan |
| Одобрен | Alan Bateman, Brian Goetz |
| Создан | 2014/05/22 13:11 |
| Обновлён | 2021/07/15 03:50 |
| Задача | 8043758 |
Аннотация
Определить API для Datagram Transport Layer Security (DTLS) версий 1.0 (RFC 4347) и 1.2 (RFC 6347).
Что не является целью
-
Поддержка интерфейсов для конкретных транспортов (например, DTLS для
DatagramSocket) не является целью. -
Поддержка обнаружения PMTU не является целью.
Критерии успеха
Реализация должна успешно взаимодействовать как в клиентском, так и в серверном режиме как минимум с двумя другими реализациями DTLS.
Мотивация
Число приложений, работающих с датаграммами, растёт, и поддержка DTLS нужна, чтобы выполнить их требования к защищённому транспорту. В RFC 4347 приводится ряд причин, по которым TLS недостаточно для приложений такого типа:
-
«TLS — самый широко используемый протокол для защиты сетевого трафика. ... Однако TLS должен работать поверх надёжного транспортного канала — как правило, TCP. Поэтому его нельзя использовать для защиты ненадёжного трафика датаграмм».
-
«... разработано всё больше протоколов прикладного уровня, которые используют транспорт UDP. В частности, всё популярнее становятся такие протоколы, как Session Initiation Protocol (SIP), и протоколы электронных игр».
-
«Во многих случаях самым желательным способом защиты клиент-серверных приложений было бы использование TLS; однако требование семантики датаграмм автоматически исключает использование TLS. Поэтому вариант TLS, совместимый с датаграммами, весьма желателен».
К протоколам, поддерживающим DTLS, относятся, в частности, следующие:
-
RFC 5238, Datagram Transport Layer Security (DTLS) over the Datagram Congestion Control Protocol (DCCP)
-
RFC 6083, Datagram Transport Layer Security (DTLS) for Stream Control Transmission Protocol (SCTP)
-
RFC 5764, расширение протокола безопасности транспортного уровня для датаграмм (DTLS) для установления ключей защищённого транспортного протокола реального времени (SRTP)
-
RFC 7252, Constrained Application Protocol (CoAP)
Google Chrome и Firefox теперь поддерживают DTLS-SRTP для Web Real-Time Communication (WebRTC). DTLS версий 1.0 и 1.2 поддерживается основными поставщиками и реализациями TLS, включая OpenSSL, GnuTLS и Microsoft SChannel.
Описание
Мы ожидаем, что API и реализация DTLS будут довольно небольшими. Новый API должен быть независимым от транспорта и похожим на javax.net.ssl.SSLEngine. Подробности об API будут добавляться сюда по ходу работы. Вот некоторые исходные соображения по проектированию:
-
API и реализация DTLS не будут управлять тайм-аутами чтения. Приложение само будет отвечать за выбор подходящего значения тайм-аута, а также за то, когда и как инициировать событие тайм-аута.
-
Вероятно, будет добавлен новый API для задания максимального размера датаграммы приложения (PMTU за вычетом накладных расходов DTLS на каждую запись). Однако если размер явно не задан, реализация DTLS должна настраивать его автоматически. Если фрагмент теряется два или три раза, реализация может уменьшать максимальный размер датаграммы приложения, пока он не станет достаточно малым.
-
Реализация DTLS должна потреблять или создавать не более одной записи TLS на каждую операцию unwrap или wrap, чтобы запись можно было доставить на уровне датаграмм по отдельности или легче собрать заново, если она доставлена не по порядку.
-
При необходимости приложение само отвечает за то, чтобы соответствующим образом собрать данные приложения, пришедшие не по порядку. API DTLS должен предоставлять доступ к данным приложения в каждом сообщении DTLS.