Recherche de site Web

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


Dans le prolongement du dernier didacticiel Let's Encrypt concernant les certificats gratuits SSL/TLS, dans cet article, nous allons montrer comment obtenir et installer des certificats SSL/TLS gratuits émis par l'autorité de certification Let's Encrypt pour Apache<. serveur Web sur les distributions CentOS/RHEL 7/6 et Fedora également.

Si vous souhaitez 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

Exemple d’environnement de test

Exigences

  1. Un nom de domaine enregistré avec des enregistrements A valides pour pointer vers l'adresse IP publique de votre serveur.
  2. Serveur Apache installé avec le module SSL activé et l'hébergement virtuel activé au cas où vous hébergez plusieurs domaines ou sous-domaines.

Étape 1 : Installer le serveur Web Apache

1. S'il 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 : Installez le certificat SSL Let's Encrypt

4. La méthode la plus simple pour installer le client Let's Encrypt consiste à cloner le référentiel github dans votre système de fichiers. Pour installer git sur votre système, vous devez activer les référentiels 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 ci-dessous :

yum install git

6. Maintenant, une fois que vous avez installé toutes les dépendances requises pour gérer Let's Encrypt, allez dans le répertoire /usr/local/ et commencez à extraire le formulaire client Let's Encrypt. son dépôt officiel github avec la commande suivante :

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

Étape 3 : Obtenez 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. Accédez au répertoire d'installation de Let's Encrypt depuis /usr/local/letsencrypt et exécutez la commande letsencrypt-auto en fournissant l'option --apache et l'option -d pour chaque sous-domaine dont vous avez besoin d'un certificat.

cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld 

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

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

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 Debian la distribution basée sur le fait.

De plus, l'hébergement virtuel est désactivé par défaut. L'instruction Apache qui précise 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 Vhost disponible, sélectionnez le fichier ssl.conf à modifier automatiquement par le client Let's Encrypt et appuyez sur Entrée pour continuer.

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

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

C'est ça! Vous avez émis avec succès un certificat SSL/TLS pour votre domaine. Vous pouvez maintenant commencer à naviguer sur votre site Web en utilisant le protocole HTTPS.

Étape 4 : Testez gratuitement le chiffrement Let's Encrypt sur le domaine

13. Afin de tester la rectitude de la négociation SSL/TLS de votre domaine, visitez le lien ci-dessous et testez votre certificat sur votre domaine.

https://www.ssllabs.com/ssltest/analyze.html

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

Une note globale de classe C rend votre domaine très peu sécurisé. Pour résoudre ces problèmes de sécurité, ouvrez le fichier de configuration Apache SSL et apportez les modifications suivantes :

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

Recherchez la ligne avec l'instruction SSLProtocol et ajoutez -SSLv3 à la fin de la ligne.

Allez plus loin dans le fichier, recherchez et commentez la ligne avec 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

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

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

16. Maintenant, testez à nouveau l'état du cryptage de votre domaine, en visitant le même lien que ci-dessus. Pour effectuer de nouveaux tests, cliquez sur le lien Effacer le cache sur le site Web.

https://www.ssllabs.com/ssltest/analyze.html 

Vous devriez maintenant obtenir une note globale de classe A, ce qui signifie que votre domaine est hautement sécurisé.

Étape 4 : Renouvellement automatique : Chiffrons les certificats sur Apache

17. Cette version bêta du logiciel Let's Encrypt publie des certificats avec une date d'expiration après 90 jours. Ainsi, afin de renouveler le certificat SSL, vous devez réexécuter 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 sur la façon de renouveler manuellement le 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 autorisations d'exécution pour le script, installez le package bc et exécutez le script afin de le tester. Utilisez votre nom de domaine comme paramètre de position 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 afin d'exécuter le script tous les deux mois, en garantissant que votre certificat sera mis à jour avant la date d'expiration.

crontab -e

Ajoutez la ligne suivante au 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 ça! Votre serveur Apache exécuté sur le système CentOS/RHEL diffuse désormais du contenu SSL à l'aide d'un certificat SSL gratuit Let's Encrypt.