All guides · Security

TLS Versions: Use TLS 1.2 and 1.3 Only

Transport Layer Security (TLS) is the protocol behind HTTPS. It has several versions: TLS 1.0 (1999), 1.1 (2006), 1.2 (2008) and 1.3 (2018). The version is agreed during the handshake, and the client and server pick the newest one they both support.

Why it matters

TLS 1.0 and 1.1 were formally deprecated in 2021 by RFC 8996. They depend on older hash functions and cipher constructions, and they cannot use the modern authenticated ciphers that newer versions rely on. All major browsers have removed support for them, and payment card rules (PCI DSS) do not accept them for protecting card data.

TLS 1.3 is the current version. It removes obsolete algorithms entirely, always provides forward secrecy, and completes the handshake in one round trip instead of two, so connections are also faster to set up.

TLS 1.2 is still secure when configured with modern cipher suites, and some older clients still need it. Supporting both 1.2 and 1.3 is the standard recommendation today.

What we check

Check Passes when
Modern TLS version the handshake negotiates TLS 1.2 or TLS 1.3

Our probe connects like a modern client, so the result is the best version your server offers to such a client. It does not list every version your server still accepts. A server that offers TLS 1.3 passes even if TLS 1.0 is also left enabled for old clients, so check your configuration directly (see below).

A server that supports nothing newer than TLS 1.1 usually fails the handshake with modern clients entirely. In that case the check is shown as “couldn’t test”, and visitors will see a connection error.

How to fix

Allow only TLS 1.2 and 1.3. Your TLS library must be recent enough for 1.3; OpenSSL 1.1.1 or newer supports it.

Nginx

ssl_protocols TLSv1.2 TLSv1.3;

Put it in the http block so every site inherits it. If a server block sets its own ssl_protocols, update that too.

Apache (mod_ssl)

SSLProtocol -all +TLSv1.2 +TLSv1.3

Caddy uses TLS 1.2 as its minimum and enables TLS 1.3 by default; no change is needed unless you lowered it.

Cloudflare: SSL/TLS → Edge Certificates → set Minimum TLS Version to TLS 1.2 and turn on TLS 1.3. This controls the connection between visitors and Cloudflare. The connection from Cloudflare to your origin is configured on your own server.

Load balancers and managed hosting: AWS, Google Cloud and Azure load balancers use named TLS policies. Choose one whose minimum is TLS 1.2 and that includes TLS 1.3.

Reload the server after the change, for example nginx -t && systemctl reload nginx.

Cipher suites

TLS 1.3 has a short, fixed list of strong ciphers and needs no tuning. For TLS 1.2, allow only suites with forward secrecy (ECDHE) and authenticated encryption (AES-GCM or ChaCha20-Poly1305). Rather than writing the list by hand, use the “intermediate” profile from Mozilla’s SSL Configuration Generator, which produces tested snippets for common servers.

Verify the result

Test which versions are still accepted from the command line:

# Should fail with a handshake error:
openssl s_client -connect example.com:443 -servername example.com -tls1_1 </dev/null

# Should succeed:
openssl s_client -connect example.com:443 -servername example.com -tls1_2 </dev/null
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null

Recent OpenSSL builds may refuse to offer TLS 1.1 themselves. If the first command fails before it connects, that tells you about your local OpenSSL, not about the server.

Before you disable old versions

Turning off TLS 1.0 and 1.1 can break very old clients: devices and operating systems that stopped receiving updates many years ago, legacy embedded systems, and old scripts that call your API. If your server logs record the negotiated protocol (Nginx $ssl_protocol, Apache %{SSL_PROTOCOL}x), check them first to see whether anything still connects that way.

Further reading: MDN: Transport Layer Security.

Last updated October 24, 2026