JEP 219: Datagram Transport Layer Security (DTLS) | 数据报传输层安全性(DTLS)
摘要
定义 Datagram Transport Layer Security (DTLS) 版本 1.0 (RFC 4347) 和 1.2 (RFC 6347) 的 API。
非目标
- 不支持特定于传输的接口(例如,
DatagramSocket
对于 DTLS 的支持)。 - 不支持 PMTU 发现。
成功度量标准
实现的客户端和服务器模式必须与至少两个其他 DTLS 实现成功互操作。
动机
支持 DTLS 对于日益增多的数据报兼容应用程序来满足安全传输需求非常重要。RFC 4347 列出了为什么 TLS 对于这些类型的应用程序不够的几个原因:
"TLS 是用于保护网络流量的最广泛部署的协议......然而,TLS 必须在可靠的传输通道上运行——通常是 TCP。因此,无法用于保护不可靠的数据报流量。"
"...越来越多的应用层协议已经设计为使用 UDP 传输。特别是诸如会话初始协议 (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,Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)
- RFC 7252,Constrained Application Protocol (CoAP)
Google Chrome 和 Firefox 现在对 Web 实时通信 (WebRTC) 支持 DTLS-SRTP。TLS 版本 1.0 和 1.2 由主要的 TLS 供应商和实现方(包括 OpenSSL、GnuTLS 和 Microsoft SChannel)支持。
描述
我们期望 DTLS 的 API 和实现相对较小。新的 API 应该是与传输无关的,并且类似于 javax.net.ssl.SSLEngine
。随着工作的进展,关于 API 的更多细节将会在这里添加。以下是一些初步的设计考虑:
DTLS 的 API 和实现将不会管理读取超时。确定适当的超时值以及何时以及如何触发超时事件将由应用程序负责。
可能会添加一个新的 API 来设置最大应用数据报大小(PMTU 减去 DTLS 每个记录的开销)。然而,如果未明确指定大小,则 DTLS 实现应自动调整大小。如果一个片段丢失两次或三次,实现可能会减小最大应用数据报大小直到足够小。
DTLS 实现应为每个拆包或封包操作消费或产生至多一个 TLS 记录,以便该记录可以单独在数据报层传递或者如果传递无序,则更容易重新组装。
如果需要,由应用程序负责相应地组装无序的应用程序数据。DTLS 的 API 应提供对每个 DTLS 消息中应用程序数据的访问权限。