
ECDHEおよびPSK鍵交換、AEAD暗号、コネクションID、セッション再開、0-RTT、Encrypted Client Helloを備えたDTLS 1.2および1.3のネイティブGo実装。
Goプログラミング言語によるネイティブなDTLS 1.2およびDTLS 1.3の実装です。
長期的な目標は、専門家によるセキュリティレビューを受けることであり、また標準ライブラリへの採用もあり得ます。
Pion DTLSはDTLS 1.2およびDTLS 1.3をサポートしています。コントリビューションやバグ修正を歓迎します。
psk_ke および psk_dhe_ke を使用した DTLS 1.3 外部 PSK。SHA-256 および SHA-384 をサポートResume による DTLS 1.2 および DTLS 1.3 の接続状態のシリアライズと復元WithECH で設定 (RFC 9849)Conn.AddPath、Path.Probe、Path.Switch による DTLS 1.3 のローカルパスプロービングとマイグレーションConn.UpdateKeys による DTLS 1.3 のトラフィックキー更新このライブラリはデフォルトで DTLS 1.2 と DTLS 1.3 を有効にし、DTLS 1.3 を優先します。
接続を DTLS 1.2 に制限するには WithMaxVersion(protocol.Version1_2) を使用し、
DTLS 1.3 を必須にするには WithMinVersion(protocol.Version1_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_ke(PSK のみ)および psk_dhe_ke
(エフェメラル ECDHE を用いた PSK)による外部 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
TLS_PSK_WITH_AES_128_CCM_8 で DTLS 1.2 を使用するには、両方に -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 上で活発なコミュニティがあります。
プロジェクトの更新情報や重要な WebRTC ニュースについては、Pion Bluesky または Pion Twitter をフォローしてください。