- Notifications
You must be signed in to change notification settings - Fork164
DTLS 1.2 Server/Client implementation for Go
License
pion/dtls
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
NativeDTLS 1.2 implementation in the Go programming language.
A long term goal is a professional security review, and maybe an inclusion in stdlib.
- RFC 6347:Datagram Transport Layer Security Version 1.2
- RFC 5705:Keying Material Exporters for Transport Layer Security (TLS)
- RFC 7627:Transport Layer Security (TLS) - Session Hash and Extended Master Secret Extension
- RFC 7301:Transport Layer Security (TLS) - Application-Layer Protocol Negotiation Extension
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!
- 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)
- ALPN extension (RFC 7301)
- 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)
- TLS_PSK_WITH_AES_128_CCM (RFC 6655)
- TLS_PSK_WITH_AES_128_CCM_8 (RFC 6655)
- TLS_PSK_WITH_AES_256_CCM_8 (RFC 6655)
- TLS_PSK_WITH_AES_128_GCM_SHA256 (RFC 5487)
- TLS_PSK_WITH_AES_128_CBC_SHA256 (RFC 5487)
- TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 (RFC 5489)
- Chacha20Poly1305
- DTLS 1.0
- Renegotiation
- Compression
This library needs at least Go 1.13, and you should haveGo modulesenabled.
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
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
Pion DTLS also comes with examples that do key exchange via PSK
go run examples/listen/psk/main.go
go run examples/dial/psk/main.go
// 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
Pion has an active community on theSlack.
Follow thePion Twitter for project updates and important WebRTC news.
We are always looking to supportyour projects. Please reach out if you have something to build!If you need commercial support or don't want to use public methods you can contact us atteam@pion.ly
Check out thecontributing wiki to join the group of amazing people making this project possible
MIT License - seeLICENSE for full text
About
DTLS 1.2 Server/Client implementation for Go