]> Cypherpunks repositories - gostls13.git/commit
crypto/tls: implement TLS 1.3 middlebox compatibility mode
authorFilippo Valsorda <filippo@golang.org>
Sun, 4 Nov 2018 00:04:44 +0000 (20:04 -0400)
committerFilippo Valsorda <filippo@golang.org>
Mon, 12 Nov 2018 20:43:06 +0000 (20:43 +0000)
commitdc0be727dc6182fb258f9f1048e9a9eef966c563
tree8bd4399f0465e364a85a3456e64e0ad7fa5afdc5
parentdb27e782780fcfe5da39671007374b06a4d8f2d4
crypto/tls: implement TLS 1.3 middlebox compatibility mode

Looks like the introduction of CCS records in the client second flight
gave time to s_server to send NewSessionTicket messages in between the
client application data and close_notify. There seems to be no way of
turning NewSessionTicket messages off, neither by not sending a
psk_key_exchange_modes extension, nor by command line flag.

Interleaving the client write like that tickled an issue akin to #18701:
on Windows, the client reaches Close() before the last record is drained
from the send buffer, the kernel notices and resets the connection,
cutting short the last flow. There is no good way of synchronizing this,
so we sleep for a RTT before calling close, like in CL 75210. Sigh.

Updates #9671

Change-Id: I44dc1cca17b373695b5a18c2741f218af2990bd1
Reviewed-on: https://go-review.googlesource.com/c/147419
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Adam Langley <agl@golang.org>
25 files changed:
src/crypto/tls/conn.go
src/crypto/tls/handshake_client_test.go
src/crypto/tls/handshake_client_tls13.go
src/crypto/tls/handshake_server_tls13.go
src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256
src/crypto/tls/testdata/Client-TLSv13-AES256-SHA384
src/crypto/tls/testdata/Client-TLSv13-ALPN
src/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256
src/crypto/tls/testdata/Client-TLSv13-ECDSA
src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial
src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest
src/crypto/tls/testdata/Client-TLSv13-KeyUpdate
src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE
src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE
src/crypto/tls/testdata/Server-TLSv13-AES128-SHA256
src/crypto/tls/testdata/Server-TLSv13-AES256-SHA384
src/crypto/tls/testdata/Server-TLSv13-ALPN
src/crypto/tls/testdata/Server-TLSv13-ALPN-NoMatch
src/crypto/tls/testdata/Server-TLSv13-CHACHA20-SHA256
src/crypto/tls/testdata/Server-TLSv13-ECDHE-ECDSA-AES
src/crypto/tls/testdata/Server-TLSv13-ExportKeyingMaterial
src/crypto/tls/testdata/Server-TLSv13-HelloRetryRequest
src/crypto/tls/testdata/Server-TLSv13-P256
src/crypto/tls/testdata/Server-TLSv13-RSA-RSAPSS
src/crypto/tls/testdata/Server-TLSv13-X25519