Releases: pion/dtls
Releases · pion/dtls
v2.0.2
v2.0.1
v2.0.0
Summary
The main highlights of the 2.0.0 release are:
- Much improved internal state tracking and handling by using a state machine mimicking the one in the DTLS RFC
- Our API has moved much closer to Go's
crypto/tls
package to help newcomers get started more quickly - A number of security improvements including the hash algorithm selection and protocol version verification
- Support for TLS_PSK_WITH_AES_128_CCM, TLS_ECDHE_ECDSA_WITH_AES_128_CCM and TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
- Supporting certificate chains and validation
- context.Context based cancellation
- Many compatibility fixes for better interopability with other DTLS libraries
- E2E testing with OpenSSL
There have been no changes since v2.0.0-rc10.
Security fixes
There are several security updates in v2.0.0. All users are strongly encouraged to update pion/dtls to v2.0.0.
Denial-of-Service vulnerability fixes
- Fix unreachable error handling (#208, #209)
- ICMP hard error like Destination Unreachable caused the disconnection. Now,
Read()/Write()
returnsnet.Error
. Users must check that whether the error permanently closed the connection or the error is temporary, especially forDial()
-ed underlying connection.n, err := conn.Read(b) if e, ok := err.(net.Error); ok || e.Temporary() { // Temporary error: should continue reading } else if err != nil { // Permanent error }
- ICMP hard error like Destination Unreachable caused the disconnection. Now,
- Fix packet unmarshal error handling (#215, #208)
- The broken record layer header caused the disconnection. Such a packet is now silently discarded.
- Verify packet epoch number (#208)
- Plaintext Finished handshake message was handled as a valid message. Handshake epoch verification has been added.
- Discard invalid ChangeCipherSpec (#208)
- Peer wrongly incremented epoch whenever receiving unauthorized/plaintext ChangeCipherSpec message after the connection is established. ChangeCipherSpec message after finishing the handshake is discarded.
- Fix boundary check of ClientHello unmarshaller (#208)
- The server crashed when receiving invalid ClientHello. A boundary check has been fixed.
Certification verification algorithm downgrade vulnerability fix
- Add signature/hash algorithm verification to ClientKeyExchange and CertificateVerify message handling (#224)
- A hash algorithm could be downgraded to the weak one, which is not in the list indicated by signature_algorithms extension. Now, the selected signature scheme is verified to be in the signature_algorithms list and the package global white list.
Replay attack vulnerability fix
- Add anti-replay protection (#211)
- Replayed Application Data was not dropped. Sliding window replay detection has been added.
Changelog
The complete log between v1.5.4 and v2.0.0:
- 513a0e3 Fix connCtx.RemoteAddr()
- e14179e Update golang.org/x/crypto commit hash to 0ec3e99
- 5f23720 Update golang.org/x/net commit hash to d3edc99
- 25fd094 Fix data race in TestReplayProtection
- b549159 Move ExportKeyingMaterial to State
- e1af363 Add ConnectionState to Conn to return State
- 3997799 Change some small things in the README
- d80c2e8 Use crypto/ed25519 from stdlib
- a63579d Refactor State.clone()
- 3caecff Update CI configs to v0.2.0
- de02b5f Update readme with restructured examples
- b5868d3 Organise examples using subdirectories
- 6f63195 Add example with certificate verification
- c97531b Add certificates for use with examples
- 3f3108d Fix listen example error handling
- 8d11fee Stop handshaker on nextConn EOF
- 3b5d798 Disable insecure hash algorithms by default
- 24f778e Update module pion/transport to v0.10.0
- 3028bdc Concurrently read and accept UDP packet
- 70aa525 Fix error type naming
- b0bb7b1 Close on outgoing sequence number overflow
- 76e8c7c Fix connection close handling
- d5cce09 Add comment to listen examples
- ccbe515 Minimize the chance of port conflict on E2E tests
- 361bce9 Fix panic on E2E test failure
- d1d5f3f Fix hash algorithm selection
- dd7858b Update module pion/transport to v0.9.2
- f1595d5 Verify protocol version
- 5b11374 Move replaydetector to pion/transport
- 9e8c93e Refactor errors
- 1a60060 Add replay attack protection
- fe75c17 Fix flaky test on WASM environment
- 45cabe8 Limit retransmit interval of last flight
- 3b0a286 Fix routine leaks in tests
- c598836 Fix udp.Conn deadlock on Close()
- 863572a Refactor handshake state machine
- 6bf60d2 Add context wrapper for Conn.Read
- 5bc0a3f Improve error handling and cleanup in tests
- 6969c90 Deadline implements context.Context
- 375a1db Fix boundary check of ClientHello unmarshaller
- a3205fa Fix default ServerName on test
- 4bd0b6c Update golang.org/x/net commit hash to 244492d
- 9ab9a33 Update golang Docker tag to v1.14
- ef86d04 Update golang.org/x/crypto commit hash to 2aa609c
- e950e1f Add end to end tests using OpenSSL
- b2bba83 Add key usage cert-sign to selfsigned certs
- 42d42d6 Add Extension Server Name Indication
- 86643a9 Remove CCM from default cipher suites
- 147774b Prefer GCM over CBC suites
- b693635 Fix encodeCipherSuites ordering
- 30a42e7 Respond to close_notify with close_notify
- d68b05b Send close_notify as warning level
- 34ebfdb Make timeout error derived from DeadlineExceeded
- cfac183 Add parameter to make default context
- d89a3e7 Support context.Context based cancellation
- bf985a0 GoDoc -> pkg.go.dev
- 34883a7 Make Conn fully net.Conn compatible
- 2cc05a1 Rearrange internal package directory
- 6babc47 Add CipherSuites and InsecureCipherSuites
- d3200a6 Add CipherSuiteName
- 5abf71d Make Listener compatible with net.Listener
- dca3dfb Add fingerprint.StringFromHash
- 51c3deb Unexpose HashAlgorithm
- 1d1fe60 Move self sign helper and CCM under pkg/
- 8f52027 Unexpose Closer
- 0b80bd9 Fix data race in CipherSuites
- 1aa50b6 Verify key before initializing CipherSuite
- c9c352a Update golang.org/x/crypto commit hash to 69ecbb4
- cfa3f98 Update CI configs to v0.1.3
- 96cbe61 Update CI configs to v0.1.2
- 4d000a0 Fix go.sum
- fcd84b6 Support WASM build/test
- 8b3680b Upgrade golangci-lint to 1.19.1
- 1bb35ee Run TestPionE2ESimpleED25519 only on Go 1.13
- 20c7570 Update assets to v0.0.2
- 04ddc09 Disable disallowed-func-lint line by line
- 5ace7ec Define internal/crypto/ccm errors as var
- 9180e92 Update golang.org/x/crypto commit hash to 53104e6
- 7fb5b69 Check err before/after calling Read
- 22e6ab2 Store handshake timeout
- d28cca3 Split Handshake/Read/Write errors
- 8f68f7d Add datagram-like pipe for connection tests
- 486ad1d Fix routine leak on close
- b4351bb Refactor cipher suites with aes128ccm
- d5c696f Add CCM cipher suits for ECDHE_ECDSA, PSK
- 7dbc646 Use X25519() instead of ScalarMult()
- 8748e4a...
v2.0.0-rc.10
v2.0.0-rc.9
v2.0.0-rc.8
Since rc.7 the following changes have been made:
- CCM is no longer part of the default cipher suites #201
- SNI extension support #194
- End to end tests with OpenSSL client/server #193
- Large refactor of the handshake using the state machine from RFC6347 Section 4.2.4 #208
- Fixes for a number of deadlocks
- Replay attack protection #215
- Verify the protocol version #211
- Fix the hash algorithm detection #224
- Close the connection on a sequence number overflow #214
- Concurrent read and accept #226
- Insecure hash algorithms are disabled by default #231
v2.0.0-rc.6
Since v2.0.0-rc5 the following changes have happened
- Key is verified before cipher suite initialisation
- Expose SelfSign helper and the CCM package
- Make HashAlgorithm private
- Listener is now compatible with stlib net.Listener
- Conn is now compatible with stdlib net.Conn
- New top-level functions CipherSuiteName, CipherSuites
and InsecureCipherSuites added to match upcoming
additions to crypto/tls in Go 1.14 - Added support for using context.Context for cancellation
in Dial, Client and Server - Where possible the API has been changed to mimic that
of crypto/tls
Initial Release
First stable release of pions/dtls
with the following features
- DTLS 1.2 Client/Server (No DTLS 1.0)
- Forward secrecy using ECDHE; with curve25519 (non-PFS will not be supported)
- Handshake retransmission
- Handshake out of order handshake processing
- Support for the following ciphers
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256