Logo Khaganat

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:https_ssl [2016/12/03 14:17] – [Connaître la date d'expiration de son certificat let's encrypt] Corrections made by Tycho zatalyzfr:https_ssl [2024/03/15 14:10] (Version actuelle) – [Renouveler le certificat] zatalyz
Ligne 7: Ligne 7:
  
 ===== Pourquoi https ? ===== ===== 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.+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 devez 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.
  
   * [[http://www.bitdefender.fr/blog/Pourquoi-le-protocole-HTTPS-est-%28toujours%29-bon-pour-vous-437.html|Développement sur pourquoi https, c'est mieux pour celui qui navigue sur le web.]]   * [[http://www.bitdefender.fr/blog/Pourquoi-le-protocole-HTTPS-est-%28toujours%29-bon-pour-vous-437.html|Développement sur pourquoi https, c'est mieux pour celui qui navigue sur le web.]]
Ligne 13: Ligne 13:
   * Pour résumer, https, c'est un peu comme le préservatif : ça protège pas de tout, mais c'est le minimum pour éviter les ennuis.   * Pour résumer, https, c'est un peu comme le préservatif : ça protège pas de tout, mais c'est le minimum pour éviter les ennuis.
  
-===== Installer un certificat auto-signé ===== +<WRAP center round info 90%> 
-<WRAP center round important 60%> +Https est à présent une norme pour tout le contenu web et les navigateurs n'aiment pas du tout tomber sur des pages qui ne sont pas protégées par ce protocoleSoyez sérieuxmettez https partout.
-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[[fr:https_ssl#lets_encrypt|Voir plus bas]]. +
- +
-Le certificat auto-signé peut tout de même présenter un peu d'intérêten local ou si on travaille dans une vm sans accès web. Mais PAS en production.+
 </WRAP> </WRAP>
  
-**En root** 
  
-Installer le paquet ''ssl-cert''. Il va installer un certificat pré-configuré pour le serveur sur lequel il est installé+===== Let's Encrypt Certbot ===== 
 +Certbot est un client permettant d'obtenir un certificat auprès de l'entité Let's Encrypt.
  
-Vérifier que dans ''/etc/apache2/sites-available/default-ssl.conf'', les options ''SSLCertificateKeyFile'' et ''SSLCertificateFile'' pointent vers le certificat+Il est inclus dans la plupart des distributions linuxdont Debian : 
 +  sudo apt install certbot 
 +   
 +Lors de sa première utilisation (et suivant les options qu'on lui donne), il pose quelques questions, demandant notamment un email pour recevoir des notifications quand on oublie de renouveler. Il faut en effet demander tous les trois mois à renouveller le certificat, l'action s'automatisant très bien. 
  
-  SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem +==== Apache ====
-  SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key+
  
 +<WRAP center round tip 60%>
 +Je déconseille de laisser certbot ajouter tout seul les informations dans Apache, il fait des crasses. Générez un certificat, modifiez à la main vos configurations Apache, ce sera mieux.
 +</WRAP>
 +Par défaut, les certificats se trouvent dans ''/etc/letsencrypt/live/''
  
 +Demander la certification d'un seul domaine sans ajouter des crasses partout : 
 +  sudo certbot certonly --standalone -d mondomain.org
  
-Activer la prise en charge de SSL : +Les chemins à ajouter dans ''/etc/apache2/site-enabled/MONSITE-le-ssl.conf'' seront : 
-  a2ensite default-ssl +  SSLCertificateFile /etc/letsencrypt/live/mondomain.org/fullchain.pem 
-  a2enmod ssl +  SSLCertificateKeyFile /etc/letsencrypt/live/mondomain.org/privkey.pem
-  service apache2 restart+
  
 +Pensez à rediriger tout votre flux du port 80 (http) vers le 443 (https), puis à redémarrer Apache.
  
 +Plus d'informations sur la [[fr:securite_sysadmin#securiser_apache|configuration sécurisée d'Apache]]. 
  
-Pour plus de détails sur l'installation d'un certificat auto-signé, si on souhaite utiliser une méthode moins "clé en main" : +=== Sous-domaines et domaines différents sur la même machine === 
-  * http://blog.moncoindunet.fr/linux/openssl-creer-un-certificat-auto-signe/ +Il vaut mieux faire un fichier par //vhost// dans ApacheFaites 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"). Vous pouvez désactiver les versions non sécurisées ensuite.
-  * http://doc.ubuntu-fr.org/tutoriel/securiser_apache2_avec_ssl+
  
-===== Let's Encrypt ===== +Let's encrypt semble repérer correctement les sous domaines dans le même fichier (nom1.mondomaine.comnom2.mondomaine.com, etc.)((À éviter quand même, un fichier par sous-domaine c'est mieux.)), 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. 
-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) : 
  
-<code> +==== Sur Nginx ==== 
-git clone https://github.com/certbot/certbot +Nginx a besoin d'être éteint pour obtenir un certficat.
-</code>+
  
-et se placer dans le répertoire certbot.+Commencez par demander un certificat SSL. Il faut arrêter nginx sinon ça fait une erreur :  
 +<code>sudo service nginx stop 
 +sudo certbot certonly --standalone -d monsite.mondomaine.org 
 +sudo service nginx start</code>
  
-lancer le client +Voir [[fr:nginx#exemple_de_configuration|l'exemple de configuration de nginx]] et la partie sur le port "443" pour ensuite déclarer correctement le certificat généré. 
  
-<code> +Lors des renouvellements, éteindre à nouveau nginx et renouveler avec la commande suivante : 
-cd certbot +  sudo certbot renew
-sudo ./certbot-auto  +
-</code>+
  
  
-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.+==== Renouveler le certificat ====
  
-Il demande aussi si on veut ou non une redirection automatique de http vers https.+Pour renouveler le certificat, il suffit de lancer la commande suivante : 
 +  sudo certbot renew
  
-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 convientA priori tout ceci se finalise tout seul et il n'y a rien d'autre à faire désormais (info valable fin août 2016). +Si vous n'avez que les certificats à renouveller sans laisser let's encrypt bidouiller vos conf, alors il faudra éteindre le serveur web (nginx ou apache) avant de renouvellerpuis rallumerCela peut se faire en laissant Certbot gérer :
  
-==== Sous-domaines et domaines différents sur la même machine ==== +  sudo certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 restart" 
-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"). +  sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx restart"
  
-Let's encrypt semble repérer correctement les sous domaines dans le même fichier (nom1.mondomaine.com, nom2.mondomaine.com, etc.)((À éviter quand même, un fichier par sous-domaine c'est mieux.)), 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 ==== +Un cron tout les 90 jours suffirait à renouveler les certificats. Exemple de cronavec renouvellement tous les deux mois et log de ce qui se fait : 
-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 certificatmais si vous avez beaucoup de domaines à gérer et que vous ne faites pas le tri dans les mails de temps en tempscomment savoir si vous avez déjà renouvelé ou pas ?+  1 1 1 2,4,6,8,10,12 * /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx restart" > /root/renewlets.log
  
-Voici un script inspiré [[https://blog.hbis.fr/2010/06/24/openssl-check_expire_date/|de celui-là]]((Merci à TychoBrahe pour les corrections.)), qui s'adapte à tous les certificats :  +Le log vous permettra de vérifier s'il y a eu des soucis
-<code bash check_cert.sh> +</WRAP>
-#!/bin/bash +
-  +
-set -euo pipefail +
-IFS=$'\n\t' +
-  +
-  +
-error() { +
-msg="$1" +
->&2 echo "$msg" +
-exit 1 +
-+
-  +
-test $# -eq 0 && error "Usage: $0 <certificate_file>" +
-  +
-FILE="$1" +
-test ! -f "$FILE" && error "$FILE: file not found." +
-  +
-EXPIRE_DATE=$(openssl x509 -in "$FILE" -noout -enddate | cut -f2 -d=); +
-  +
-echo "Certificate file: $FILE"; +
-echo "Expiration date: $EXPIRE_DATE"; +
-  +
-exit 0; +
-</code>+
  
-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 ====+===== Client Let's Encrypt ACMEd ===== 
 +Le client ACMEd est à privilégier si vous voulez une installation sécurisée. Voir le détail dans la [[fr:acmed|page dédiée]].
  
-Pour renouveler le certificat, il suffit de lancer la même commande que pour l'installer : +===== Installer un certificat auto-signé ===== 
-<code+<WRAP center round important 60%
-cd letsencrypt +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é.
-sudo ./certbot-auto  +
-</code>+
  
-<WRAP center round tip 90%> +Il existe à présent Let's encryptqui vous fournit gratuitement un certificat reconnu. Il n'y a quasiment aucune raison de ne pas l'utiliserdonc oubliez les certificats auto-signés et utilisez Let's encrypt.
-Pour renouveler tout automatiquementsans interactionla commande suivante semble la bonne : +
-  certbot-auto renew+
  
-Dans ce cas, un cron tout les 90 jours suffirait à renouveler les certificats. Exemple de cronavec renouvellement tous les deux mois et log de ce qui se fait : +Le certificat auto-signé peut tout de même présenter un peu d'intérêten local ou si on travaille dans une vm sans accès web. C'est la raison pour laquelle la doc reste ici. Mais PAS en production. 
-  1 1 1 2,4,6,8,10,12 * /root/letsencrypt/certbot-auto renew /root/renewlets.log+</WRAP>
  
 +**En root**
  
-</WRAP>+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
  
-===== Améliorer et tester la sécurité du site via https ===== +  SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem 
-Pour vérifier la qualité de la sécurisation de l'accès au site :  +  SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
-  * https://www.ssllabs.com/ssltest/analyze.html : permet de voir les plus grosses erreurs +
-  * https://observatory.mozilla.org/ : Mozilla est plus exigeant et permet d'avoir un site bien sécurisé+
  
  
-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 +Activer la prise en charge de SSL : 
-( à noter le "-" devant SSLv3 )+  a2ensite default-ssl 
 +  a2enmod ssl 
 +  service apache2 restart
  
-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" 
  
-<WRAP center round help 60%> +Pour plus de détails sur l'installation d'un certificat auto-signési on souhaite utiliser une méthode moins "clé en main" 
-À testernouvelle proposition +  * http://blog.moncoindunet.fr/linux/openssl-creer-un-certificat-auto-signe/ 
-  ALL:!aNULL:!eNULL:!LOW:!MEDIUM:!EXP:!RC4:!3DES:!MD5:!PSK:+HIGH +  * http://doc.ubuntu-fr.org/tutoriel/securiser_apache2_avec_ssl
-</WRAP>+
  
 +===== 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 : 
 +  * https://www.ssllabs.com/ssltest/analyze.html : permet de voir les plus grosses erreurs
 +  * https://observatory.mozilla.org/ : Mozilla est plus exigeant et permet d'avoir un site bien sécurisé
 +  * https://cryptcheck.fr/ qui est terriblement exigeant... attention, certains paramètres qui vous vaudront un F (parce que c'est vrai, c'est pas sécu) peuvent aussi empêcher certains de vos internautes de vous voir (parce qu'ils ont des vieux navigateurs pas à jour). Mais ces clients méritent-ils de voir votre site ?
  
-<WRAP center round tip 60%> +Let's encrypt est pas mal... mais pas parfait((En tout cas, au moment où je rédige ces lignes, 30 décembre 2016.)). La taille de la clé est un peu petite ; il faut avouer que la génération d'une clé plus longue peut prendre un très long temps. 
-Ancienne configurationgé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' +
-</WRAP>+
  
 +On va donc [[https://f4fia.wordpress.com/2015/08/09/configurer-son-serveur-web-en-https/|générer de nouveaux paramètres Diffie-Hellman]].
  
-Noter le "!" devant certains nom d'algorithme pour les interdire, par exemple : !PSK, !RC4, etc...+<code>cd /etc/letsencrypt/live/MONSITE.COM/ 
 +openssl dhparam -out dhparams.pem 4096</code>
  
-Puis imposer de négocier les protocoles dans l'ordre ci-dessus : donc du plus sûr au moins sûr +Puis ajouter cette ligne dans ''/etc/apache2/site-enabled/MONSITE-le-ssl.conf'' 
-  SSLHonorCipherOrder On+  SSLDHParametersFile /etc/letsencrypt/live/MONSITE.COM/dhparams.pem
  
-Pensez à relancer l'Apache : +Voir aussi [[fr:securite_sysadmin#module_ssl|la configuration de SSL.]]
-  /etc/init.d/apache2 restart+
  
 {{tag>Serveur Web Tutoriel Brouillon}} {{tag>Serveur Web Tutoriel Brouillon}}
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/https_ssl.1480771056.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact