TLS 1.2 has been the baseline for "good TLS configuration" for years. It supports strong cipher suites, it is widely supported, and most compliance frameworks accept it. But TLS 1.3 has been available since 2018, is supported by every modern client library, and eliminates several classes of vulnerabilities that TLS 1.2 allows in theory.
What TLS 1.3 Fixed
- ▸Removed RSA key exchange — which allowed passive decryption of past sessions if the server private key was later compromised (no forward secrecy)
- ▸Removed CBC cipher modes — which enabled BEAST, POODLE, and LUCKY13 attacks
- ▸Removed MD5 and SHA-1 in the handshake
- ▸Encrypted the handshake itself — reducing metadata leakage
- ▸1-RTT and 0-RTT handshakes — faster connection establishment
The Compatibility Argument
The standard argument for keeping TLS 1.2 is backward compatibility — some clients might not support TLS 1.3. In 2026, this is not a real concern for API clients. TLS 1.3 support is in: every version of Python 3.7+, Node.js 10+, Java 11+, Go 1.13+, and every major browser released after 2019. If your API clients are older than that, you have bigger compatibility problems than TLS version.
How to Enforce TLS 1.3 Only
The implementation depends on where you terminate TLS. If you are using Cloudflare, set the minimum TLS version to 1.3 in the SSL/TLS settings. If you are running nginx directly, set `ssl_protocols TLSv1.3;`. If you are using an AWS Application Load Balancer, choose the TLS 1.3 security policy.
G8KEPR enforces TLS 1.3 on all endpoints. Our SSL Labs score is A+ — TLS 1.3 only, HSTS preloaded, OCSP stapling enabled. You can verify this by running the SSL Labs test against api.g8kepr.com or app.g8kepr.com.
