Installer un certificat SSL Let’s Encrypt pour sécuriser votre site
Category:Linux,SécuritéAvertissement
L’informatique, cela ne fonctionne jamais su premier coup, alors backuper préalablement votre site WEB et la base de données associée…
Livré sans résultats garantis…
Prérequis
La première chose est d’autoriser le firewall à accepter les connexions HTTPS, pour la simple et bonne raison que sans cela, une étape de vérification aura lieu plus en aval, et se terminera par un message d’erreur de type suivant :
Failed to connect to x.x.x.x:443 for TLS-SNI-01 challenge
Donc
sudo ufw allow https
Installer le mode SSL pour Apache
yum -y install mod_ssl
Redémarrer le servcice Apache
systemctl restart httpd.service
Installer le repository EPEL, qui nous servira à installer des packages en dépendances
yum install epel-release
Installer GIT
yum install git
Aller dans le répertoire approprié pour rafraichir GIT
cd /usr/local/
Rafraichir GIT pour ramener les fichiers en local
git clone https://github.com/letsencrypt/letsencrypt
Aller dans le répertoire approprié pour invoquer la commande de demande de certificat
cd /usr/local/letsencrypt
Lancer la commande appropriée. Très important : Générer tant pour le nom de domaine que pour le site web, sinon les navigateurs vous sonneront une erreur plutôt moche…
./letsencrypt-auto --apache -d mercise.ch -d www.
mercise.ch
Un certain nombre de dépendances supplémentaires seront certainement téléchargées…
Tester le site
Aller sur
Entrer votre nom de domaine (sans www…)
Un rapport est issu, avec nombre d’informations…
Si vous recevez une note de C, c’est que votre domaine est vraiment mal sécurisé, et des ajustements sont nécessaires. Éditez le fichier concernant la configuration SSL avec
nano /etc/httpd/conf.d/ssl.conf
Chercher pour la ligne commençant par
SSLProtocol
Et ajouter
-SSLv3
A la fin de la ligne.
Continuer votre recherche, et commenter avec un dièse la ligne commençant par
SSLCipherSuite
Créer une nouvelle ligne en copiant la (longue…) ligne suivante :
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
Et rajouter encore 2 lignes supplémentaires en-desous…
SSLHonorCipherOrder on
et
SSLOptions +StrictRequire
Re-Tester le site
Aller sur
Refaire le test mais cliquer sur « Clear cache »
Un rapport est issu, avec nombre d’informations… Et on devrait avoir quelque chose de mieux maintenant ;>)
Renouveler automatiquement le certificat Let’s Encrypt sur Apache
Et oui, cette béat crée un certificat qui expire après …. 90 jours. C’est court, et très moche, mais un script a été créé afin de renouveler automatiquement le certificat.
Ce script sera schedulé par la commande « cron » afin d’être lancée au moment approprié.
Pour renouveler manuellement le certificat, vous devez taper la ligne suivante :
cd /usr/local/letsencrypt
Et exécuter
./letsencrypt-auto certonly --apache --renew-by-default -d
mercise
.ch –d www.
mercise.ch
Alors, un script a été créé sur cette base là…
Insérer un script de renouvellement de certificat Let’s Encrypt
Avec votre éditeur préféré (j’ai le mien…), taper
nano /usr/local/bin/le-renew-centos
Et coller le contenu suivant, créé par Erika Heidi, dont le script est disponible sur GitHub
!/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
Donner les permissions d’exécution sur ce script (évidemment…)
chmod +x /usr/local/bin/le-renew-centos
Installer le package bc
yum install bc
Et lancer votre script pour le tester…
/usr/local/bin/le-renew-centos
mercise.ch
Vous devriez obtenir le nombre de jour restant…
Scheduler votre script avec crontab
Lancer la commande pour ajouter une entré…
crontab -e
Pressez « Insert » pour passer en mode insertion (Oui c’est du VI). Et coller
0 1 1 */2 * /usr/local/bin/le-renew-centos ordi.ch >> /var/log/
mercise.ch -renew.log 2>&1
Taper <ESC> pour sortir du mode d’édition et taper
:wq
Relancer votre service cron….
sudo systemctl restart crond.service
Et contrôler que votre entrée est bien présente…
crontab –l
Voilà, n’oubliez pas de contrôler après 90 jours si votre site est toujours fonctionnel….
Changer les liens sur votre site Internet…
Pour accéder à votre dossier principal en HTTPS…. Par exemple dans WordPress…
Remplacer les chemins d’accès dans vos réglages généraux
Et changer aussi votre fichier htaccess comme suit dans
/var/www/html /.htaccess
En modifiant la ligne suivante
RewriteRule ^(.*)$ https://www.
mercise.ch/$1 [R,L]
Dans le fichier
/var/www/html/wordpress/wp-config.php
Ajouter à la fin la ligne
define('FORCE_SSL_ADMIN', true);
Et retravailler tous vos menus dans WordPresss….
Puis redémarrer le serveur….
sudo reboot
Et surtout…
Tester, et tester
Auteur: OBF