使用 Go 编程语言原生实现的 DTLS 1.2 和 DTLS 1.3。
一个长期目标是进行专业的安全审查,或许还能被纳入标准库。
Pion DTLS 支持 DTLS 1.2 和 DTLS 1.3。我们欢迎贡献和错误修复。
psk_ke 和 psk_dhe_ke,支持 SHA-256 和 SHA-384Resume 进行 DTLS 1.2 和 DTLS 1.3 连接状态序列化与恢复WithECH 配置(RFC 9849)Conn.AddPath、Path.Probe 和 Path.SwitchConn.UpdateKeys该库默认启用 DTLS 1.2 和 DTLS 1.3,并优先使用 DTLS 1.3。
使用 WithMaxVersion(protocol.Version1_2) 将连接限制为 DTLS 1.2,
或使用 WithMinVersion(protocol.Version1_3) 要求使用 DTLS 1.3。
对于监听 127.0.0.1:4444 的 DTLS 服务器
go run examples/listen/selfsign/main.go
对于连接到 127.0.0.1:4444 的 DTLS 客户端
go run examples/dial/selfsign/main.go
Pion DTLS 可以连接到自身以及 OpenSSL。
// Generate a certificate
openssl ecparam -out key.pem -name prime256v1 -genkey
openssl req -new -sha256 -key key.pem -out server.csr
openssl x509 -req -sha256 -days 365 -in server.csr -signkey key.pem -out cert.pem
// Use with examples/dial/selfsign/main.go
openssl s_server -dtls1_2 -cert cert.pem -key key.pem -accept 4444
// Use with examples/listen/selfsign/main.go
openssl s_client -dtls1_2 -connect 127.0.0.1:4444 -debug -cert cert.pem -key key.pem
DTLS 1.3 支持带可选 0-RTT 早期数据的会话票据恢复。
恢复仅允许使用 psk_dhe_ke(带临时 ECDHE 的 PSK)。
恢复示例 演示了证书认证的
首次连接、加密的会话存储,以及后续带恢复和可选早期数据的连接。
有关运行说明以及会话存储对 0-RTT 的单次使用 Claim 要求,请参阅其 README。
State/Resume API 还支持在无需新握手的情况下恢复已建立的 DTLS 1.3
连接。请参阅 Resume。
DTLS 1.3 支持使用 SHA-256 或 SHA-384 的外部 PSK,包括 psk_ke(仅 PSK)和 psk_dhe_ke
(带临时 ECDHE 的 PSK)。客户端可在每次握手中提供多个
PSK 身份,供服务器选择。
PSK 示例默认使用 DTLS 1.3,并采用 TLS_AES_128_GCM_SHA256。
go run examples/listen/psk/main.go
go run examples/dial/psk/main.go
要将 DTLS 1.2 与 TLS_PSK_WITH_AES_128_CCM_8 配合使用,请向两者都传入 -dtls12:
go run examples/listen/psk/main.go -dtls12
go run examples/dial/psk/main.go -dtls12
使用这些 OpenSSL DTLS 1.2 命令时,请以 -dtls12 参数运行 Pion 示例。
// Use with examples/dial/psk/main.go -dtls12
openssl s_server -dtls1_2 -accept 4444 -nocert -psk abc123 -cipher PSK-AES128-CCM8
// Use with examples/listen/psk/main.go -dtls12
openssl s_client -dtls1_2 -connect 127.0.0.1:4444 -psk abc123 -cipher PSK-AES128-CCM8
Pion 在 Discord 上拥有活跃的社区。
关注 Pion Bluesky 或 Pion Twitter 以获取项目更新和重要的 WebRTC 新闻。
我们始终乐于支持你的项目。如果你有想要构建的东西,请联系我们! 如果你需要商业支持,或不想使用公开渠道,可以通过 [email protected] 联系我们。
查看贡献 wiki,加入让这个项目成为可能的优秀人群。