Sécuriser un site sur Apache/Ubuntu et obtenir un score de A+ chez Qualys SSL

Tout ceci a été testé sur Ubuntu LTS 1804 et Apache2

1. Obtenir un certificat

A l’heure actuelle il est relativement simple,et surtout gratuitement possible d’obtenir un certificat émis par une autorité de certification reconnue.Tout cela est possible grâce à let’s encrypt

La première étape est donc d’obtenir un certificat pour couvrir votre sous-domaine ou un wildcard pour couvrir l’ensemble du domaine.

Vous trouverez ici toutes les étapes pour déployer le certificat sur votre serveur Apache.Vous verrez c’est relativement simple.

Je vous conseille d’activer la redirection http/https lors du setup.

2. Désactivation des protocoles obsolètes

A l’heure actuelle, par défaut ,Apache autorise encore l’utilisation de tout les protocoles sauf les SSL.Nous allons donc désactiver TLS 1.0 et 1.1 qui ne sont plus surs.

Le répertoire d’apache sous ubuntu se trouve dans /etc/apache2/

Nous allons donc chercher la directive SSLProtocol dans les fichiers de configuration en tapant grep -ri SSLProtocol /etc/

Ci-dessous le retour obtenu chez moi.La dernière ligne peut être ignorée car c’est un fichier .save donc un backup.

/etc/letsencrypt/options-ssl-apache.conf:SSLProtocol             -all +TLSv1.2

/etc/apache2/mods-available/ssl.conf: SSLProtocol -all +TLSv1.2

/etc/apache2/mods-enabled/ssl.conf.save: SSLProtocol all -SSLv3

Bon ci-dessus les paramètres sont déjà corrects.

Vous devez donc éditer les deux fichiers de configuration(ssl.conf et options-ssl-apache.conf) et Pour la ligne SSLProtocol mettre -all +TLSv1.2

SSLProtocol -all +TLSv1.2

Celà fera en sorte de n’utiliser que la dernière version de TLS actuellement.

Si vous souhaitez n’utiliser que des suites de chiffrement fortes, alors vous pouvez aussi mettre les paramètres suivants pour SSLCipherSUite

Le paramètre SSLHonorCipherOrder on oblige le client a utiliser les suites dans l’ordre que nous avons défini sur le serveur.

SSLCipherSUite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256

SSLHonorCipherOrder     on

Une fois les motifs faites,redémarrez apache en utilisant:

sudo systemctl restart apache2

3. Directives HSTS et CAA record (DNS Certification Authority Authorization )

La directive HSTS permets de forcer via votre serveur une connexion sécurisée sur votre site web.

Je vous invite à lire cet article qui explique bien et de manière simple ce que c’est.

Premièrement, assurez-vous que les headers soient actifs sur votre serveur apache.

Pour activer les headers:

sudo a2enmod headers
systemctl restart apache2

Pour activer la directive:

modifier le fichier /etc/apache2/sites-enabled/000-default-le-ssl.conf

ajouter ceci dans le fichier de configuration:

#HSTS directive

Header always set Strict-Transport-Security “max-age=31536000;includeSubDomains;preload”

Redémarrer Apache pour que le changement soit pris en compte.

CAA record:

Définition:DNS Certification Authority Authorization (CAA) est une spécification basée sur le DNS permettant au titulaire d’un nom de domaine de lister les autorités de certification (CA) qui sont autorisées à délivrer des certificats pour ce domaine.

Vous devez donc pour pouvoir créer ce record avoir accès aux records DNS du domaine que vous possédez.

Dans notre cas, l’autorité de certification est let’s encrypt.

Pour un sous domaine nommé “test” par exemple, celà donnera ceci:

test 1800 IN CAA 0 issue "letsencrypt.org"

Pour un certificat wildcard couvrant l’ensemble du domaine exemple.com :

exemple.com 1800 IN CAA 0 issuewild "letsencrypt.org"

Si vous souhaitez être notifié des violations de la police, vous pouvez créer le record ci-dessous qui doit contenir l’adresse mail sur laquelle vous souhaitez être notifié de la violation.

exemple.com CAA 0 iodef "adresse@exemple.com"

Voilà,avec ceci, vous devriez obtenir un grade A+ sur les tests qualys SSL,et une bonne implémentation de TLS sur votre serveur.

Pour sécuriser d’avantage votre serveur web, il existe d’autres headers et directives côté serveur.J’aborderai probablement celles-ci dans un autre article.