TLS (Transport Layer Security) is the foundation of secure web communication. Getting it right means your users' data is protected in transit. Getting it wrong can expose encrypted traffic to downgrade attacks, man-in-the-middle interception, and compliance failures. Here are the seven most common TLS mistakes and exactly how to fix them.

Mistake 1: Supporting TLS 1.0 and 1.1

TLS 1.0 (released 1999) and TLS 1.1 (2006) are formally deprecated by the IETF (RFC 8996) and are no longer considered secure. They are vulnerable to attacks like POODLE and BEAST. All major browsers have removed support for these versions.

Fix (Nginx):

ssl_protocols TLSv1.2 TLSv1.3;

Fix (Apache):

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

Mistake 2: Using Weak Cipher Suites

Cipher suites that use RC4, DES, 3DES, or export-grade encryption (EXPORT ciphers) are cryptographically broken. Cipher suites without forward secrecy (non-ECDHE/DHE key exchange) mean that if the server's private key is ever compromised, all past recorded traffic can be decrypted.

Fix (Nginx) — modern, forward-secret ciphers only:

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;
ssl_prefer_server_ciphers off;

Mistake 3: No HTTPS Redirect

If your server responds to plain HTTP on port 80 without redirecting to HTTPS, users who type your domain without "https://" (or click an old HTTP link) will connect insecurely. Any data sent in that first HTTP request — including cookies — is transmitted in plaintext.

Fix (Nginx):

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Mistake 4: Missing HSTS Header

Even with an HTTP-to-HTTPS redirect in place, a user's very first request can still be intercepted (before the redirect). HSTS (HTTP Strict Transport Security) tells browsers to always use HTTPS for your domain — the browser itself enforces HTTPS without ever making an HTTP request after the first visit.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

See the full guide in our HSTS article.

Mistake 5: Expired or Self-Signed Certificates

An expired certificate causes browser warnings that erode user trust and are technically a TLS failure. Self-signed certificates provide encryption but no identity verification — users have no assurance they are talking to the real server.

Fix: Use certificates from a trusted CA. Let's Encrypt provides free, automatically renewable certificates. Set up automatic renewal with certbot renew in a cron job or use a service like AWS Certificate Manager that handles renewal automatically.

Mistake 6: Server Version Disclosure in Headers

Responding with Server: Apache/2.4.51 (Ubuntu) or X-Powered-By: PHP/7.4.3 gives attackers an exact version number to search for known CVEs. This is low-hanging fruit in any security audit.

Fix (Nginx):

server_tokens off;

Fix (Apache):

ServerTokens Prod
ServerSignature Off

Mistake 7: Failing to Test After Configuration Changes

A misconfiguration can silently break TLS or leave weak protocols re-enabled after a server update. Test your TLS configuration after every change and periodically.

Tools:

TLS Checklist

Getting these right earns an A+ on SSL Labs and significantly raises the bar for any attacker targeting your transport layer.