Skip to content
/ dtls Public
forked from pion/dtls

DTLS 1.2 Server/Client implementation for Go

License

Notifications You must be signed in to change notification settings

xy-poin/dtls

This branch is 269 commits behind pion/dtls:master.

Folders and files

NameName
Last commit message
Last commit date
Nov 28, 2021
Dec 2, 2021
Sep 29, 2020
May 24, 2019
Sep 29, 2021
Jan 31, 2021
May 24, 2019
Nov 29, 2020
Nov 7, 2020
Sep 29, 2021
Dec 13, 2018
May 24, 2019
Nov 19, 2021
Mar 5, 2020
Mar 5, 2020
Mar 5, 2020
Sep 29, 2021
Jan 28, 2021
Feb 9, 2020
Jan 31, 2021
Aug 4, 2020
Jan 16, 2021
Apr 2, 2021
Apr 2, 2021
Feb 24, 2021
Jun 2, 2020
Feb 17, 2021
Jan 24, 2021
Jan 16, 2021
Jan 12, 2020
Jan 31, 2021
Mar 9, 2020
Mar 9, 2020
Mar 9, 2020
Jan 16, 2021
Mar 5, 2020
Feb 17, 2021
Jan 16, 2021
Jan 16, 2021
Jan 31, 2021
Feb 24, 2021
Feb 24, 2021
Jan 24, 2021
Jan 16, 2021
Jan 24, 2021
Jun 2, 2020
Jan 16, 2021
Dec 2, 2021
Dec 2, 2021
Jan 24, 2021
Jan 24, 2021
Jan 16, 2021
Feb 24, 2021
Feb 24, 2021
Jan 16, 2021
Sep 29, 2020
Jan 16, 2021
Nov 16, 2021
Apr 1, 2020
Mar 30, 2020
Sep 29, 2020
Jan 16, 2021
Feb 17, 2021
Jan 28, 2021

Repository files navigation


Pion DTLS

A Go implementation of DTLS

Pion DTLS Sourcegraph Widget Slack Widget
Build Status GoDoc Coverage Status Go Report Card Codacy Badge License: MIT


Native DTLS 1.2 implementation in the Go programming language.

A long term goal is a professional security review, and maybe an inclusion in stdlib.

Goals/Progress

This will only be targeting DTLS 1.2, and the most modern/common cipher suites. We would love contributions that fall under the 'Planned Features' and any bug fixes!

Current features

  • DTLS 1.2 Client/Server
  • Key Exchange via ECDHE(curve25519, nistp256, nistp384) and PSK
  • Packet loss and re-ordering is handled during handshaking
  • Key export (RFC 5705)
  • Serialization and Resumption of sessions
  • Extended Master Secret extension (RFC 7627)

Supported ciphers

ECDHE
  • TLS_ECDHE_ECDSA_WITH_AES_128_CCM (RFC 6655)
  • TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 (RFC 6655)
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (RFC 8422)
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (RFC 8422)
PSK
  • TLS_PSK_WITH_AES_128_CCM (RFC 6655)
  • TLS_PSK_WITH_AES_128_CCM_8 (RFC 6655)
  • TLS_PSK_WITH_AES_128_GCM_SHA256 (RFC 5487)
  • TLS_PSK_WITH_AES_128_CBC_SHA256 (RFC 5487)

Planned Features

  • Chacha20Poly1305

Excluded Features

  • DTLS 1.0
  • Renegotiation
  • Compression

Using

This library needs at least Go 1.13, and you should have Go modules enabled.

Pion DTLS

For a DTLS 1.2 Server that listens on 127.0.0.1:4444

go run examples/listen/selfsign/main.go

For a DTLS 1.2 Client that connects to 127.0.0.1:4444

go run examples/dial/selfsign/main.go

OpenSSL

Pion DTLS can connect to itself and 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

Using with PSK

Pion DTLS also comes with examples that do key exchange via PSK

Pion DTLS

go run examples/listen/psk/main.go
go run examples/dial/psk/main.go

OpenSSL

  // Use with examples/dial/psk/main.go
  openssl s_server -dtls1_2 -accept 4444 -nocert -psk abc123 -cipher PSK-AES128-CCM8

  // Use with examples/listen/psk/main.go
  openssl s_client -dtls1_2 -connect 127.0.0.1:4444 -psk abc123 -cipher PSK-AES128-CCM8

Contributing

Check out the contributing wiki to join the group of amazing people making this project possible:

License

MIT License - see LICENSE for full text

About

DTLS 1.2 Server/Client implementation for Go

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 98.6%
  • Shell 1.4%