Logo Khaganat
Traductions de cette page?:

Cette page est noté comme étant en brouillon. Votre participation pour l'améliorer est requise !

Ceci est une ancienne révision du document !


Https et certificat ssl

Cet article est en brouillon et contient des informations fragmentaires. Si vous en avez l'occasion, complétez-le, ajoutez des liens vers des pages mieux fournies.

Prenez avec précaution les informations contenues ici et vérifiez.

Pourquoi https ?

Lorsque vous vous rendez sur un site internet, un flux de données circulent entre votre ordinateur et celui du serveur où le site est hébergé. Pour certains sites, ça n'a pas grande importance que ce flux soit lisible par tous, mais à partir du moment où vous devez entrer un mot de passe, vous devriez passer par le protocole “https” qui garantit que les échanges entre vous et le serveur sont chiffrés. Donc, que les échanges ne sont pas faciles à espionner.

Installer un certificat auto-signé

Un certificat auto-signé va générer une alerte sur tout navigateur sérieux. Le certificat installé est très basique et sert uniquement sur un serveur de test pour des tests autour de https. Il ne sera reconnu par aucune autorité.

Il existe à présent Let's encrypt, qui vous fournit gratuitement un certificat reconnu. À l'heure où ces lignes sont écrites, il est encore en version bêta, pas exempt de défauts mais fonctionnel et donc à privilégier. Voir plus bas.

Le certificat auto-signé peut tout de même présenter un peu d'intérêt, en local ou si on travaille dans une vm sans accès web. Mais PAS en production.

En root

Installer le paquet ssl-cert. Il va installer un certificat pré-configuré pour le serveur sur lequel il est installé.

Vérifier que dans /etc/apache2/sites-available/default-ssl.conf, les options SSLCertificateKeyFile et SSLCertificateFile pointent vers le certificat

SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

Activer la prise en charge de SSL :

a2ensite default-ssl
a2enmod ssl
service apache2 restart

Pour plus de détails sur l'installation d'un certificat auto-signé, si on souhaite utiliser une méthode moins “clé en main” :

Let's Encrypt

Créer un certificat avec Let's encrypt, c'est très simple !™

Tout d'abord, se placer sur un compte utilisateur et récupérer le client Let's Encrypt (désormais appelé CertBot) :

git clone https://github.com/certbot/certbot

et se placer dans le répertoire certbot.

lancer le client :

cd certbot
sudo ./certbot-auto 

Les certificats se retrouvent dans /etc/letsencrypt/live/ une fois que le client a fini. Il pose quelques questions, notamment un email pour recevoir des notifications, et les noms de domaines pour lesquels on veut un certificat.

Il demande aussi si on veut ou non une redirection automatique de http vers https.

Il n'y a plus qu'a configurer apache2 avec ces certificats. Il a prévu un fichier de configuration avec ce qui existait déjà, vérifiez qu'il convient. A priori tout ceci se finalise tout seul et il n'y a rien d'autre à faire désormais (info valable fin août 2016).

Sous-domaines et domaines différents sur la même machine

Pour que Let's encrypt puisse générer un certificat pour tous les domaines hébergés sur le serveur, il vaut mieux faire un fichier par vhost dans Apache. Faites uniquement les versions non sécurisées (port 80), let's encrypt génère automatiquement les versions sécurisées (port 443, soit le “https”).

Let's encrypt semble repérer correctement les sous domaines dans le même fichier (nom1.mondomaine.com, nom2.mondomaine.com, etc.)1), mais pas les noms de domaines différents (mondomaine.com et mondomaine2.com par exemple), qui doivent impérativement être dans deux fichiers de configuration différents.

Connaître la date d'expiration de son certificat let's encrypt

Actuellement, la durée des certificats délivrés par let's encrypt est très courte : 90 jours. Vous recevrez un mail à l'adresse renseignée lors de la création du certificat, mais si vous avez beaucoup de domaines à gérer et que vous ne faites pas le tri dans les mails de temps en temps, comment savoir si vous avez déjà renouvelé ou pas ?

Voici un script, qui s'adapte à tous les certificats :

check_cert.sh
#!/bin/bash
#
# check_cert.sh
#
# Boris HUISGEN <bhuisgen@hbis.fr>
#
 
if [ $# -eq 0 ];
then
   echo "$Usage: $0 <certificate_file>" ;
   exit 1;
fi
 
FILE=$1
 
if [ ! -e $FILE ] ; then
   echo "$1 file does not exist."
   exit 2;
fi
 
EXPIRE_DATE=$(openssl x509 -in $FILE -noout -enddate | cut -f2 -d=);
 
echo "Certificate file: $FILE";
echo "Expiration date: $EXPIRE_DATE";
 
exit 0;

Copiez ça dans un fichier check_cert.sh puis lancez la commande suivante

./check_cert.sh /etc/letsencrypt/live/monsite.net/cert.pem

À adapter suivant où le certificat est stocké.

Renouveler le certificat

Pour renouveler le certificat, il suffit de lancer la même commande que pour l'installer :

cd letsencrypt
sudo ./certbot-auto 

Pour renouveler tout automatiquement, sans interaction, la commande suivante semble la bonne :

certbot-auto renew

Dans ce cas, un cron tout les 90 jours suffirait à renouveler les certificats. Exemple de cron, avec renouvellement tous les deux mois et log de ce qui se fait :

1 1 1 2,4,6,8,10,12 * /root/letsencrypt/certbot-auto renew > /root/renewlets.log

Améliorer et tester la sécurité du site via https

Pour vérifier la qualité de la sécurisation de l'accès au site :

Voir le fichier de configuration du module SSL d'apache /etc/apache2/mods-available/ssl.conf. Virer le protocole SSL3 qui n'est plus considéré comme “sûr” depuis la démonstration de l'attaque PODDLEd

SSLProtocol all -SSLv2 -SSLv3

( à noter le “-” devant SSLv3 )

Interdire la compression d'échanges cryptés (oui oui cela introduit une possibilité d'attaque)

SSLCompression off

Et finalement lister la liste des “algorithmes de crypto” autorisés :

SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

À tester, nouvelle proposition :

ALL:!aNULL:!eNULL:!LOW:!MEDIUM:!EXP:!RC4:!3DES:!MD5:!PSK:+HIGH

Ancienne configuration, génère un A- au 11/02/2016. La nouvelle au dessus vient de https://www.digicert.com/ssl-support/ssl-enabling-perfect-forward-secrecy.htm.

SSLCipherSuite 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'

Noter le “!” devant certains nom d'algorithme pour les interdire, par exemple : !PSK, !RC4, etc…

Puis imposer de négocier les protocoles dans l'ordre ci-dessus : donc du plus sûr au moins sûr :

SSLHonorCipherOrder On

Pensez à relancer l'Apache :

# /etc/init.d/apache2 restart
1)
À éviter quand même, un fichier par sous-domaine c'est mieux.
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/https_ssl.1480770614.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact