SSL

DNS CAA

DNS Certification Authority Authorization (CAA) [CAA] is an Internet security policy mechanism for domain name registrants to indicate to certificate authorities whether they are authorized to issue digital certificates for a particular domain name. Registrants publish a “CAA” Domain Name System (DNS) resource record which compliant certificate authorities check for before issuing digital certificates.

Create a policy. A good starting point is using Certificate Transparency to see which CAs you’re currently using. To do so, use https://sslmate.com/caa/ : CAA Record Helper, Use “Auto-Generate Policy”.

Publish the CAA DNS record and check it:

$ dig +short cgsecurity.org caa
0 issue "letsencrypt.org"
0 iodef "mailto:grenier@cgsecurity.org"

Apache

SSLCipherSuite

You can use the SSL Configuration Generator

Here are some configurations I am using.

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA
SSLHonorCipherOrder     on
SSLEngine On
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
SSLHonorCipherOrder     off
SSLCompression          off

HSTS

HTTP Strict Transport Security (HSTS) is a policy mechanism that helps to protect websites against man-in-the-middle attacks such as protocol downgrade attacks and cookie hijacking. It allows web servers to declare that web browsers (or other complying user agents) should automatically interact with it using only HTTPS connections, which provide Transport Layer Security (TLS/SSL), unlike the insecure HTTP used alone.

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Warning

Do not use it with a self-signed certificate.

Apache: OCSP stapling

The Online Certificate Status Protocol (OCSP) is an Internet protocol used for obtaining the revocation status of an X.509 digital certificate.[2] It was created as an alternative to certificate revocation lists (CRL).

LetsEncrypt is not using OCSP stapling anymore, so you have to disable it.

SSLUseStapling Off

OCSP stapling must be enabled domain by domain. Your Apache configuration may be similar to

SSLUseStapling          on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off

Audit

  • SSL Server Test You should get an A+

  • sslscan, a Security assessment tool for SSL/TLS. Packaged with most Linux distribution.