TLS 1.3

Last update: 2023-04-20 18:47:07 +0800 +0800
Available translations: 日本語 / 中文(简体) / 中文(繁體)

This overview describes TLS 1.3. TLS carries a sequence of records. Before encryption, handshake data is carried in TLSPlaintext records; the legacy record-version field exists for interoperability and TLS 1.3 peers do not use it to negotiate the protocol. Records are limited to 2^14 bytes of content before permitted expansion.

Handshake #

The client sends ClientHello with a random value, supported cipher suites, key shares, extensions, and a legacy session ID. Its legacy_version is 0x0303; the supported-versions extension negotiates TLS 1.3. Current standard AEAD suites include AES-GCM and ChaCha20-Poly1305 with SHA-256 or SHA-384.

The server replies with ServerHello, selecting a suite and key share. It can instead send HelloRetryRequest when it needs a different acceptable key share; the client then sends a second ClientHello containing the requested change. Both parties derive handshake traffic secrets from the key exchange and transcript, authenticate the handshake with Finished, and derive application traffic secrets. The server sends its Certificate and CertificateVerify when certificate authentication is used.

TLS 1.3 encrypts handshake messages after ServerHello and removes obsolete RSA key transport and static-DH negotiation. Certificate validation remains essential: clients verify the chain to a trusted issuer, the hostname or service identity, validity periods, key usage, signature algorithms, and relevant revocation policy. A certificate authority issues a certificate after validating control of a DNS name or other subject identity; the certificate binds that identity to a public key.

For certificate encoding, path construction, and local trust anchors, see X.509 Certificates and Cryptographic Trust Stores.

Comments

Read or comment on GitHub (sign-in required to comment)