Not every TLS configuration is secure. TLS 1.0 and 1.1 are deprecated and contain known vulnerabilities, and some cipher suites are weak or breakable. A poorly configured HTTPS creates a false sense of security — the browser shows a lock, but an attacker can decrypt the traffic. Proper TLS configuration is the foundation of every web application.
Recommended Configuration — Nginx¶
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
Key decisions: allow only TLS 1.2 and 1.3 (TLS 1.3 preferred), use AEAD cipher suites with forward secrecy (ECDHE). ssl_prefer_server_ciphers off is recommended for TLS 1.3 because the client typically chooses the best cipher. OCSP stapling eliminates the need for the browser to contact the CA for certificate verification — reducing latency and improving privacy.
Additional Security Headers¶
Beyond TLS configuration, add the HSTS header (Strict-Transport-Security: max-age=63072000; includeSubDomains; preload) to ensure the browser always uses HTTPS. After verifying functionality, add the domain to the HSTS Preload list for protection even on first access.
Testing¶
# SSL Labs online test
# https://ssllabs.com/ssltest/
openssl s_client -connect example.com:443 -tls1_3
testssl.sh https://example.com
The SSL Labs test rates configuration from A+ to F. Aim for A+. testssl.sh is an open-source alternative for local testing without sending data to external services. Test regularly — new vulnerabilities appear continuously.
What to NEVER Use¶
- SSL 2.0, 3.0, TLS 1.0, 1.1 — known vulnerabilities (POODLE, BEAST, CRIME)
- RC4, 3DES, NULL ciphers — breakable or without encryption
- Self-signed certificates in production — Let’s Encrypt is free
Key Takeaway¶
TLS 1.2 as minimum, TLS 1.3 as ideal. AEAD cipher suites with forward secrecy, OCSP stapling, HSTS header. Test on SSL Labs and aim for A+.