Installer et configurer un certificat Let’s Encrypt sur Nginx


  • FrançaisFrançais

  • On vous propose un petit tutoriel pour installer et configurer le certificat SSL de Let’s Encrypt pour vos sites web. On décrit l’étape pour Nginx.


    Suivez-nous sur notre page Facebook et notre canal Telegram

    Installation et configuration du certificat SSL de Let's Encrypt pour votre serveur sous Nginx.

    Ce n’est pas le tutoriel le plus complet et on se contente des paramètres par défaut. Let’s Encrypt vous permet d’utiliser des certificats SSL gratuits. Vous pourrez ainsi proposer une connexion en HTTPS à vos visiteurs et le SSL est également un critère de plus en plus important pour les moteurs de recherche. La grande force de Let’s Encrypt, par rapport à d’autres initiatives de SSL gratuit comme StartSSL, est que la plupart du processus est automatisé. La configuration, pour chaque serveur, était le principal problème pour que les webmestres qui voulaient adopter le HTTPS.

    Si vous avez apprécié cet article, soutenez-moi sur Patreon ou Buy me a coffee Vous recevrez chaque semaine du contenu exclusif et des réponses à vos questions. Merci ! 😊

    Pour que cela fonctionne, vous devez avoir une connexion SSH à votre serveur et on ignore les étapes pour un hébergement mutualisé. Mais du moment que vous pouvez accéder à votre serveur, alors vous pourrez installer et configurer Let’s Encrypt. De toutes façons, avec les prix des serveurs VPS ou même dédiés, l’hébergement mutualisé n’est plus si attirant.

    Installer Let’s Encrypt sur votre serveur

    On décrit uniquement les étapes fournies par le guide officiel de Let’s Encrypt (désormais connu comme Certbot). Vous vous connectez à votre serveur SSH et vous tapez les commandes :

    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto --help

    La commande ./letsencrypt-auto –help n’est pas obligatoire, mais elle vous permet de lister les commandes possibles pour la configuration. Le dossier d’installation est également important, car Let’s Encrypt peut afficher des messages de plateformes insécurisées à cause de problèmes de permission. Si cela vous arrive, vous pouvez forcer l’installation avec un sudo -H suivi de la commande de configuration, mais il vaut mieux résoudre les problèmes à la base.

    Une fois que vous avez cloné Let’s Encrypt via Git, vous avez plusieurs options pour le configurer. Mais on peut le faire en une seule ligne. Let’s Encrypt peut se configurer automatiquement selon votre serveur tel que :

    ./letsencrypt-auto --apache

    pour Apache ou :

    ./letsencrypt-auto --nginx

    Et tout le processus sera automatique et c’est pourquoi, on déconseille fortement d’utiliser cette configuration automatique. On a expliqué que l’installation d’un certificat SSL n’est pas une partie de plaisir, car vous avez peut-être installé des composants dans d’autres dossiers et Let’s Encrypt risque d’échouer complètement. De plus, la configuration automatique pour Nginx est uniquement disponible en phase expérimentale.

    Pour configurer Let’s Encrypt tout en douceur, vous pouvez utiliser la commande suivant (c’est ce qu’on a utilisé pour ce site) :

    ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com

    Cette configuration de Let’s Encrypt se fait en mode autonome et elle concerne uniquement le nom de domaine. On préfère cette option, car cela permet d’associer le certificat SSL à des noms de domaine. Cela permet d’être plus souple et de le désactiver rapidement s’il y a un problème. Mais vous pouvez également configurer Let’s Encrypt pour le dossier public de votre serveur et de votre nom de domaine.

    ./letsencrypt-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is

    Mais pour être honnête, on préfère la première méthode qui s’occupe uniquement du nom de domaine, car elle est beaucoup plus pratique. Un avertissement est que vous devez configurer le certificat SSL pour le sans et le WWW de votre nom de domaine. Sinon, votre site en https://www.votresite.com va générer une grosse erreur avec un bon message rouge dans le navigateur.

    Pour renouveler le certificat, vous tapez simplement la commande de configuration que vous aviez utilisé pour paramétrer la première fois et dans notre cas, c’est :

    ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com

    ou :

    ./letsencrypt-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is

    Si vous avez utilisé l’option -webroot.

    Le processus de configuration de Let’s Encrypt peut prendre un peu de temps. Vous verrez aussi une invite pour fournir une adresse mail pour les notifications. Mettez une vraie adresse mail, car elle vous avertira lorsque le certificat de Let’s Encrypt est sur le point d’expirer. Un certificat de Let’s Encrypt est valable pour 3 mois. Il y a des tutoriels sur le web qui permettent aussi d’automatiser le renouvellement du certificat, mais franchement, il n’y pas de quoi se luxer le poignet quand on peut renouveler le certificat avec une seule ligne de commande.

    Configurer le certificat SSL Let’s Encrypt pour Nginx

    A la fin du procesus de configuration, vous verrez un petit message de récapitulatif et le point important est le chemin d’accès de vos clés concernant le certificat. En général, le chemin par défaut :

    /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/fullchain.pem;
    /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/privkey.pem;

    Avec ces informations, on va configurer Nginx. Il y a des centaines de tutoriels pour configurer le SSL sur Nginx, mais c’est tellement chaotique qu’on vous propose notre méthode. Vous copiez la configuration de votre hote virtuel en HTTP et vous le collez en changeant simplement les paramètres SSL.

    Par exemple, voici une configuration d’hote virtuel en HTTP en Nginx :

    server {
    listen 80;
    root /LeDossierPublicDeVotreServeur;
    index index.html index.htm index.php;
    
    server_name votrenomdedomaine.com;
    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.php$args;
    }
    location ~ .php$ {
     try_files $uri =404;
     fastcgi_pass 127.0.0.1:9000;
     fastcgi_index index.php;
     include fastcgi_params;
    }
    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain application/xml application/javascript text/css;
    }

    Donc, vous copiez toute la configuration ci-dessus et vous créez un second bloc server en bas. Les seuls changements sont le port et la spécification SSL (443 ssl) ainsi que les paramètres ssl_certificate et ssl_certificate_key pour les chemins d’accès de vos clés.

    server {
    listen 443 ssl;
    root /LeDossierPublicDeVotreServeur;
    index index.html index.htm index.php;
    
    server_name votrenomdedomaine.com;
    ssl_certificate /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/fullchain.pem;
    ssl_certificate_key /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/privkey.pem;
    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.php$args;
    }
    location ~ .php$ {
     try_files $uri =404;
     fastcgi_pass 127.0.0.1:9000;
     fastcgi_index index.php;
     include fastcgi_params;
    }
    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain application/xml application/javascript text/css;
    
    
    }
    
    

    Et c’est tout, redémarrez Nginx et votre PHP FastCGI (tel que PHP-FPM) et accédez à votre site en HTTPS. Cela devrait fonctionner. Il faut parfois croiser les doigts pour que cela fonctionne. Si vous voyez le beau vert du HTTPS, alors félicitations, votre site est désormais en HTTPS. N’oubliez pas de renouveler le certificat avant 3 mois. Mais on peut ajouter quelques petits trucs pour améliorer la configuration.

    Redirection du HTTP vers HTTPS et neutralisez la faille Poddle

    Votre site est désormais en HTTPS, mais le site en HTTP fonctionne aussi. Cela signifie que vous avez affaire à 2 sites pour un moteur de recherche. Et donc, il faut une redirection 301 de la connexion en HTTP vers le HTTPS. Vous mettez la commande return 301 https://$server_name$request_uri; dans votre serveur HTTP sous le nom de domaine tel que :

    server_name votrenomdedomaine.com;
    return 301 https://$server_name$request_uri;

    Comme ça, toutes les URL commençant par le HTTP vont être redirigées de manière permanente en version HTTPS. L’indexation du site pourra être perturbé pendant quelques jours puisqu’il ne faut pas oublier que Google considère une version en HTTPS comme un nouveau site jusqu’à ce qu’il comprenne qu’il fait partie d’un site existant. Et il n’y a aucune crainte à avoir sur le SEO. On ne perd pas la valeur des liens.

    Un certificat SSL, c’est bien, mais il faut également le tester pour voir s’il ne contient pas des failles. Le site SSLabs vous permet d’analyser votre site en HTTPS pour voir s’il y a une faille.J’ignore si cela vient de la configuration par défaut de Let’s Encrypt, mais on s’est fait allumer pour la faille Poddle qui vient du SSL3. Pour corriger cette faille, vous ajoutez simplement la ligne suivante dans votre bloc server en HTTPS dans Nginx sous le nom de domaine :

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    Et donc, cela devrait ressembler à :

    server_name votrenomdedomaine.com;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/fullchain.pem;
    ssl_certificate_key /etc/VotreDossierDeLetsEncrypt/live/votrenomdedomaine/privkey.pem;

    SSLabs est assez strict et la moindre faille ou avertissement vous donnera une note inférieure, mais franchement, c’est acceptable pour un petit site qui veut bénéficier du SSL.

    Certaines URLs en HTTPS affichent un cadenas avec un triangle jaune

    Certaines de vos URL pourraient afficher l’icône SSL-triangle-jauneau lieu du HTTPS en vert SSL-vert:

    Google propose des explications détaillées sur ces avertissements. Notons que cela ne provoque pas un gros avertissement comme c’est le cas de certificat SSL auto-certifié. Ce cadenas et son triangle d’avertissement indique que certains éléments de votre page (donc de l’URL) sont en HTTP tandis que vous proposez une connexion en HTTPS. Cela provient souvent des images sur la page qui ne sont pas hébergé directement sur votre serveur.

    On a eu ce problème puisqu’on stocke nos images sur Amazon S3 et qu’on utilise une URL personnalisée pour S3. Amazon S3 propose une connexion HTTPS si on utilise son URL par défaut. Donc, si vous avez cet avertissement dans le HTTPS, alors regardez le code source de la page et cherchez les liens commençant par HTTP et remplacez les par HTTPS si c’est nécessaire. Si ce sont des images qui posent un problème, alors vous pouvez les héberger directement sur votre site pour avoir le HTTPS en natif. Concernant WordPress, n’oubliez pas non plus de changer l’URL du site dans les Réglages principaux de WordPress. Ce n’est pas forcément un problème puisqu’on a mis une redirection 301 dans Nginx, mais c’est quand même mieux de le faire.

    Renouveler votre certificat de Let’s Encrypt

    Pour renouveler votre certificat de Let’s Encrypt, vous avez 2 solutions. Si vous avez une version ancienne de Let’s Encrypt, vous devez simplement retaper la commande que vous aviez utilisé pour créer le certificat à la base. En gros, c’est comme de redemander un certificat, mais cela va le renouveler.

    Mais je vous conseille de mettre à jour votre Let’s Encrypt. Vous allez dans le répertoire où vous avez installé Let’s Encrypt et vous tapez la commande :

    sudo git pull

    Cela va mettre à jour votre dépot de Let’s Encrypt.

    Ensuite, vous pouvez renouveler votre certificat de Let’s Encrypt avec une commande plus simple. En premier lieu, faites le test avec :

    ./letsencrypt-auto renew --dry-run

    Si vous voyez des avertissements liés à votre serveur, alors vous devez stopper le serveur avant de relancer. Refaites la commande pour voir si tout de passe bien. Si les messages sont corrects, alors vous relancez la commande en mode normal :

    ./letsencrypt-auto renew

    Selon la documentation de Let’s Encrypt, cette commande va simplement mettre à jour votre configuration existante. Et donc, si vous aviez des certificats pour plusieurs domaines, alors cette commande va les renouveler en une seule fois. Cela a fonctionné pour nous, mais les cas peuvent être différents. La méthode ancienne, à savoir, retaper l’ancienne commande, peut toujours être utile si la nouvelle ne fonctionne.

     

    [yasr_overall_rating]

     

    Si vous avez apprécié cet article, soutenez-moi sur Patreon ou Buy me a coffee Vous recevrez chaque semaine du contenu exclusif et des réponses à vos questions. Merci ! 😊

    Houssen Moshinaly

    Rédacteur en chef d'Actualité Houssenia Writing. Rédacteur web depuis 2009.

    Blogueur et essayiste, j'ai écrit 9 livres sur différents sujets comme la corruption en science, les singularités technologiques ou encore des fictions. Je propose aujourd'hui des analyses politiques et géopolitiques sur le nouveau monde qui arrive. J'ai une formation de rédaction web et une longue carrière de prolétaire.

    Pour me contacter personnellement :

    5 réponses

    1. S. dit :

      Merci !
      Enfin un tuto clair pour les imbéciles (comme moi), pour qui cette partie du déploiement reste obscure !

      Donc, merci.

    2. Fidoboulettes dit :

      un grand merci pour ce tuto qui m’a grandement servi à l’installation du “S” de mon http

    3. Witched dit :

      Bon tuto, clair, et accessible. Cependant, pouvez vous le compléter en traitant de la partie renouvellement des certificats let’s encrypt?
      Merci

    4. Charles dit :

      SAlut et merci pour ce tuto bien pratique.

      Est-ce que je peux utiliser LEtsencrypt pour plusieurs noms de domaines hébergés sur le même VPS ?

      SI oui, suffit il de lancer à chaque fois la commande adaptée aux différents noms de domaine ?
      ./letsencrypt-auto certonly –standalone -d example.com -d http://www.example.com

      Merci et bonne journée

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *