← Back to Blog
security

TLS 1.2 vs TLS 1.3: Key Differences and How to Upgrade Your Server (2026)

TLS 1.3 was standardized in RFC 8446 in 2018 and is now supported by all major browsers and servers. Compared to TLS 1.2, it removes a decade of accumulated baggage — weak cipher suites, RSA key exchange, CBC mode ciphers, and the BEAST/POODLE/LUCKY13 attack surfaces — and replaces a two-round-trip handshake with a faster one-round-trip design. If your server still only supports TLS 1.2, enabling 1.3 is a straightforward configuration change with no downside.

🔍

TLS Scanner

Test which TLS versions your server accepts and which ciphers it negotiates.

Try It Free →

On a typical HTTPS connection with 50ms round-trip latency, TLS 1.3 saves one full round trip — 50ms of connection setup time. On mobile networks with 150ms+ RTT, that's 150ms saved per new connection.

What TLS Version Is Your Server Using?

# Check with OpenSSL — shows negotiated protocol version openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \ | grep "Protocol\|Cipher" # Good output (TLS 1.3 active): Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 # Also test TLS 1.3 specifically: openssl s_client -connect yourdomain.com:443 -tls1_3 -servername yourdomain.com 2>/dev/null \ | grep "Cipher" # If this returns a cipher: TLS 1.3 is supported # If "no ciphers available": TLS 1.3 not enabled

How to Enable TLS 1.3 on Apache

TLS 1.3 support in Apache requires OpenSSL 1.1.1+ and Apache 2.4.36+. Check your versions first:

apache2 -v # Apache version openssl version # OpenSSL version — need 1.1.1 or higher

If versions are met, add these directives to your HTTPS VirtualHost:

<VirtualHost *:443> ServerName yourdomain.com SSLEngine On SSLCertificateFile /etc/ssl/yourdomain.crt SSLCertificateKeyFile /etc/ssl/yourdomain.key # Enable TLS 1.2 and 1.3; explicitly exclude older versions SSLProtocol -all +TLSv1.2 +TLSv1.3 # Modern cipher suites (TLS 1.3 ciphers are auto-used; these cover TLS 1.2) SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:\ ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 SSLHonorCipherOrder off </VirtualHost>
# Test config and reload sudo apachectl configtest sudo systemctl reload apache2

How to Enable TLS 1.3 on Nginx

Nginx supports TLS 1.3 since version 1.13.0, but OpenSSL must be 1.1.1+. Check: nginx -V 2>&1 | grep OpenSSL

server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/ssl/yourdomain.crt; ssl_certificate_key /etc/ssl/yourdomain.key; # Include TLS 1.3 (and keep 1.2 for compatibility) ssl_protocols TLSv1.2 TLSv1.3; # TLS 1.3 uses its own cipher suite list automatically # These cover TLS 1.2 connections: ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:\ ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; }
sudo nginx -t && sudo systemctl reload nginx

Verify TLS 1.3 Is Active

# Confirm TLS 1.3 handshake succeeds: openssl s_client -connect yourdomain.com:443 -tls1_3 # Expected output: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Verify return code: 0 (ok)
After enabling TLS 1.3, run the SSL Checker on your domain. It reports which TLS versions are supported and flags any deprecated protocols still active (TLS 1.0, 1.1) that should be disabled.

Should You Disable TLS 1.2?

Not yet, but it's coming. As of 2026, TLS 1.2 is still required for compatibility with older devices (some Android 6 and iOS 8 clients, older Windows versions). The PCI DSS standard requires TLS 1.2 minimum. Keep TLS 1.2 enabled alongside 1.3 unless you have a specific reason to drop it (e.g., a high-security API endpoint where you fully control all clients).

TLS 1.0 and 1.1 should already be disabled — they've been deprecated since 2021 and are blocked by all major browsers.

FAQs

  • What is 0-RTT in TLS 1.3 and should I enable it?
    0-RTT (zero round-trip time resumption) lets returning visitors resume a session without any handshake delay. However, 0-RTT data is vulnerable to replay attacks — an attacker can capture and retransmit the same request. Enable it only for safe, idempotent endpoints (like GET requests), never for login forms or payment flows. Most servers leave it disabled by default.
  • My server supports TLS 1.3 but clients still connect with TLS 1.2. Is that a problem?
    No. When both sides support TLS 1.3, the client will use it. If the client only supports TLS 1.2, the server falls back to 1.2. Supporting both simultaneously is the recommended configuration.
  • Does upgrading to TLS 1.3 require a new SSL certificate?
    No. Your existing certificate (RSA or ECDSA) works fine with TLS 1.3. The certificate and the protocol version are independent. Only the supported elliptic curves and cipher suites change, not the certificate format.

Upgrading to TLS 1.3 on macOS

macOS 12+ Homebrew

macOS 10.15 Catalina and later support TLS 1.3 natively in the system TLS stack (Secure Transport / Network.framework). For Homebrew-managed servers, TLS 1.3 configuration is identical to Linux:

# Homebrew Apache — edit /opt/homebrew/etc/httpd/extra/httpd-ssl.conf # Enable TLS 1.2 + 1.3 (disable 1.0 and 1.1): SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 # Homebrew Nginx — edit /opt/homebrew/etc/nginx/nginx.conf ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256; # Test and reload httpd -t && brew services restart httpd nginx -t && brew services restart nginx
# Verify TLS 1.3 is negotiating correctly openssl s_client -connect yourdomain.com:443 -tls1_3 2>/dev/null | grep "Protocol" # Expected: Protocol : TLSv1.3 # Check what TLS version curl uses (macOS uses system TLS by default) curl -v --tlsv1.3 https://yourdomain.com 2>&1 | grep "TLSv"

macOS Safari and other Apple apps use TLS 1.3 automatically when available — no user-side configuration is needed. The changes above only affect Homebrew-managed server software.


Check which TLS versions your server supports

The SSL Checker shows TLS protocol support, active cipher suites, and flags any deprecated configurations.