Comment installer le certificat SSL Let’s Encrypt pour sécuriser Apache sur RHEL/CentOS 7/6

Étendre le dernier tutoriel Let’s Encrypt concernant les certificats SSL/TLS gratuits, dans cet article nous allons démontrer comment obtenir et installer des certificats SSL/TLS gratuits émis par l’autorité de certification Let’s Encrypt pour le serveur web Apache sur les distributions CentOS/RHEL 7/6 et Fedora également.

Si vous cherchez à installer Let’s Encrypt pour Apache sur Debian et Ubuntu, suivez ce guide ci-dessous :

Configurer Let’s Encrypt pour sécuriser Apache sur Debian et Ubuntu

Environnement de test
Install Lets Encrypt for Apache on CentOS and RHEL

Exigences

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. Serveur Apache installé avec le module SSL activé et l’hébergement virtuel activé si vous hébergez plusieurs domaines ou sous-domaines.

Étape 1 : Installer le serveur web Apache

1. Si ce n’est pas déjà installé, le démon httpd peut être installé en exécutant la commande ci-dessous :

# yum install httpd

2. Pour que le logiciel Let’s Encrypt fonctionne avec Apache, assurez-vous que le module SSL/TLS est installé en exécutant la commande ci-dessous :

# yum -y install mod_ssl

3. Enfin, démarrez le serveur Apache avec la commande suivante :

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

Étape 2 : Installer le certificat SSL Let’s Encrypt

4. La méthode la plus simple pour installer le client Let’s Encrypt consiste à cloner le dépôt GitHub dans votre système de fichiers. Pour installer git sur votre système, vous devez activer les dépôts Epel avec la commande suivante.

# yum install epel-release

5. Une fois les dépôts Epel ajoutés à votre système, installez le client git en exécutant la commande suivante :

# yum install git

6. Maintenant, une fois que vous avez installé toutes les dépendances nécessaires pour traiter avec Let’s Encrypt, allez dans le répertoire /usr/local/ et commencez à extraire le client Let’s Encrypt depuis son dépôt GitHub officiel avec la commande suivante :

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

Étape 3 : Obtenir un certificat SSL Let’s Encrypt gratuit pour Apache

7. Le processus d’obtention d’un certificat Let’s Encrypt gratuit pour Apache est automatisé pour CentOS/RHEL grâce au plugin apache.

Exécutons la commande de script Let’s Encrypt afin d’obtenir un certificat SSL. Allez dans le répertoire d’installation de Let’s Encrypt à partir de /usr/local/letsencrypt et exécutez la commande letsencrypt-auto en fournissant l’option --apache et le drapeau -d pour chaque sous-domaine pour lequel vous avez besoin d’un certificat.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 
Create Lets Encrypt SSL Certificate for Apache

8. Fournissez l’adresse e-mail qui sera utilisée par Let’s Encrypt pour récupérer votre clé perdue ou pour des notifications urgentes, puis appuyez sur Entrée pour continuer.

Add Email Address for Lets Encrypt

9. Acceptez les termes de la licence en appuyant sur la touche Entrée.

Agree Lets Encrypt License

10. Sur CentOS/RHEL, par défaut, le serveur Apache n’utilise pas le concept de séparation des répertoires pour les hôtes activés des hôtes disponibles (inactifs) comme le font les distributions basées sur Debian.

De plus, l’hébergement virtuel est désactivé par défaut. L’instruction Apache qui spécifie le nom du serveur (ServerName) n’est pas présente dans le fichier de configuration SSL.

Pour activer cette directive, Let’s Encrypt vous demandera de sélectionner un hôte virtuel. Comme il ne trouve aucun hôte virtuel disponible, sélectionnez le fichier ssl.conf à modifier automatiquement par le client Let’s Encrypt et appuyez sur Entrée pour continuer.

Active VirtualHost Directive and Select Mod_SSL

11. Ensuite, choisissez la méthode Facile pour les requêtes HTTP et appuyez sur Entrée pour avancer.

Allow Easy HTTP Requests

12. Enfin, si tout s’est bien passé, un message de félicitations devrait s’afficher à l’écran. Appuyez sur Entrée pour libérer l’invite.

Lets Encrypt Enabled on Domain

C’est tout ! Vous avez émis avec succès un certificat SSL/TLS pour votre domaine. Maintenant, vous pouvez commencer à naviguer sur votre site Web en utilisant le protocole HTTPS.

Étape 4 : Tester le chiffrement gratuit Let’s Encrypt sur le domaine

13. Pour tester la rectitude de la poignée de main SSL/TLS de votre domaine, visitez le lien ci-dessous et testez votre certificat sur votre domaine.

https://www.ssllabs.com/ssltest/analyze.html
Verify Lets Encrypt Certificate on Domain

14. Si vous recevez une série de rapports concernant la vulnérabilité de votre domaine dans les tests effectués, alors vous devez corriger ces failles de sécurité de toute urgence.

Un classement global de la classe C rend votre domaine très peu sécurisé. Pour résoudre ces problèmes de sécurité, ouvrez le fichier de configuration SSL d’Apache et apportez les modifications suivantes :

# vi /etc/httpd/conf.d/ssl.conf

Recherchez la ligne contenant l’instruction SSLProtocol et ajoutez -SSLv3 à la fin de la ligne.

Fix Apache SSL Configuration

Allez plus loin dans le fichier, recherchez et commentez la ligne contenant SSLCipherSuite en plaçant un # devant et ajoutez le contenu suivant sous cette ligne :

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
Configure SSL Configuration

15. Après avoir apporté toutes les modifications ci-dessus, enregistrez et fermez le fichier, puis redémarrez le démon Apache pour appliquer les changements.

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16. Maintenant, testez à nouveau le statut de chiffrement de votre domaine en visitant le même lien que ci-dessus. Pour effectuer de nouveaux tests, cliquez sur le lien Effacer le cache du site web.

https://www.ssllabs.com/ssltest/analyze.html 
Test Lets Encrypt SSL Certificate on Website

Vous devriez maintenant obtenir un classement global de la classe A, ce qui signifie que votre domaine est hautement sécurisé.

Étape 4 : Renouvellement automatique des certificats Let’s Encrypt sur Apache

17. Cette version bêta du logiciel Let’s Encrypt délivre des certificats avec une date d’expiration après 90 jours. Ainsi, pour renouveler le certificat SSL, vous devez exécuter à nouveau la commande letsencrypt-auto avant la date d’expiration, avec les mêmes options et drapeaux utilisés pour obtenir le certificat initial.

Un exemple de renouvellement manuel du certificat est présenté ci-dessous.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. Pour automatiser ce processus, créez le script bash suivant fourni par github erikaheidi, dans le répertoire /usr/local/bin/ avec le contenu suivant. (le script est légèrement modifié pour refléter notre répertoire d’installation letsencrypt).

# vi /usr/local/bin/le-renew-centos

Ajoutez le contenu suivant au fichier le-renew-centos:

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19. Accordez les permissions d’exécution pour le script, installez le paquet bc et exécutez le script pour le tester. Utilisez votre nom de domaine comme paramètre positionnel pour le script. Exécutez les commandes ci-dessous pour accomplir cette étape:

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

20. Enfin, en utilisant la planification Linux, ajoutez une nouvelle tâche cron pour exécuter le script tous les deux mois, assurant que votre certificat sera mis à jour avant la date d’expiration.

# crontab -e

Ajoutez la ligne suivante en bas du fichier.

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

C’est tout ! Votre serveur Apache fonctionnant sur CentOS/RHEL sert désormais du contenu SSL en utilisant un certificat SSL Let’s Encrypt gratuit.

Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/