Tag Archives: HTTPS

  • -

Installer un certificat SSL Let’s Encrypt pour sécuriser votre site

Category:Linux,Sécurité Tags : 

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

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

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

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

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