TLS Cipher Suites


SSL certificates with key lengths under 2048 bits, or that use older hashing algorithms like MD5 or SHA-1, need to be replaced. Adequate hashing algorithms start with SHA-256 (SHA-2 with 256-bit hash values).

Symmetric encryption algorithm DES and stream cipher RC4 need to go away entirely.


Also no longer permissible are these TLS/SSL versions in their entirety:


A cipher suite consists of a key exchange algorithm, an authentication algorithm, a symmetric encryption algorithm, and a message authentication (hashing) algorithm. Currently (2025), the most secure and most recommended combination of these four is:


The problem is one of both deprecating (and ideally removing) support for known-weak ciphers while still retaining compatibility with commodity Web browser software of the day. OWASP has recommendations, and Mozilla has a configuration generator. Acunetix has good guidelines.



Mozilla provides as of April 2025 the following example Apache config for "intermediate" client compatibility:

<VirtualHost *:443>
SSLEngine on

SSLCertificateFile /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateKeyFile /path/to/private_key

# enable HTTP/2, if available
Protocols h2 http/1.1

# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLOpenSSLConfCmd Curves X25519:prime256v1:secp384r1
SSLCipherSuite 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:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"


Also, ensure that the right Diffie-Hellman group parameters are present in openssl.cnf:

openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_module
[ssl_module]
system_default = tls_system_default
[tls_system_default]
Groups = x25519:prime256v1:x448:ffdhe2048:ffdhe3072


An Apache configuration would look like

SSLOpenSSLConfCmd Groups x25519:secp256r1:ffdhe3072

TLS compression should be disabled in order to protect against a vulnerability nicknamed CRIME that could potentially allow an attacker to recover sensitive information such as session cookies.

# Disable TLS compression
SSLCompression off


Test the hardened configuration using one of the following online test tools


Add Certification Authority Authorization (CAA) DNS records to domain DNS to define which CAs are permitted to issue certificates for it.