Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Ceci est une ancienne révision du document !


SSL pour Nginx sur Raspberry Pi : Comment sécuriser Nginx avec Let's Encrypt sur Raspberry Pi OS Buster

L'autorité de certification Let’s Encrypt fournit un moyen simple d'obtenir et d'installer des certificats TLS/SSL gratuits, permettant le cryptage HTTPS sur les serveurs Web. Elle fournit un client logiciel, Certbot, qui automatise la plupart des étapes requises. Actuellement, le processus d'obtention et d'installation d'un certificat est entièrement automatisé sur Apache et Nginx.

Dans ce tutoriel, vous utiliserez Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Debian 10 et configurer votre certificat pour qu'il se renouvelle automatiquement.

Ce didacticiel utilise un fichier de bloc server Nginx distinct au lieu du fichier par défaut. Nous vous recommandons de créer de nouveaux fichiers de bloc server Nginx pour chaque domaine, pour conserver les fichiers par défaut comme configuration de secours.

Pré-requis

Première étape : Installation de Certbot

Installez certbot :

pi@framboise:~ $ sudo apt update
pi@framboise:~ $ sudo apt upgrade
pi@framboise:~ $ sudo apt install certbot python-certbot-nginx

Autres étapes

Nous allons récupérer depuis Let’s Encrypt un certificat SSL pour notre Raspberry Pi.

Confirmation de la configuration de Nginx

Pour configurer automatiquement SSL pour Nginx, Certbot doit pouvoir de trouver le bloc server correct dans votre config.

Pour ce faire, il recherche une directive server_name correspondant au domaine pour lequel vous demandez un certificat.

Si vous avez bien configuré l'hôte virtuel lors l'installation de Nginx, le fichier /etc/nginx/sites-available/mondomaine.fr doit contenir un bloc server pour votre domaine avec la directive server_name définie de manière appropriée.

  1. Pour le vérifier, ouvrez avec les droits d'administration le fichier /etc/nginx/sites-available/mondomaine.fr et recherchez la ligne server_name qui devrait ressembler à ceci :
    /etc/nginx/sites-available/mondomaine.fr
    server {
    <...>
        server_name mondomaine.fr www.mondomaine.fr;
    <...>
    }

    Si c'est le cas, quittez votre éditeur et passez à l'étape suivante ; sinon, mettez le fichier à jour pour qu'il corresponde.

  2. Vérifiez la syntaxe de vos modifications de configuration :

    pi@framboise:~ $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    Si vous obtenez une erreur, rouvrez le fichier de l'hôte et recherchez les fautes de frappe. Une fois la syntaxe de votre fichier de configuration de l'hôte correcte, rechargez la nouvelle configuration de Nginx :

    pi@framboise:~ $ sudo nginx -s reload

Certbot peut maintenant trouver le bon bloc server et le mettre à jour.

Autoriser HTTPS sur le pare-feu

Si le pare-feu ufw est activé, ajustez les paramètres pour autoriser le trafic HTTPS.

  1. Affichez le réglage actuel :

    pi@framboise:~ $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    80                         ALLOW       Anywhere
    22/tcp                     ALLOW       Anywhere
    80 (v6)                    ALLOW       Anywhere (v6)             
    22/tcp (v6)                ALLOW       Anywhere (v6)

  2. Si le port 443 n'est pas ouvert, activez-le par :

    pi@framboise:~ $ sudo ufw allow ssh

Obtention d'un certificat SSL

Certbot fournit des plugins pour obtenir des certificats SSL. Le plugin Nginx reconfigure Nginx et recharge la configuration autant que nécessaire. Pour utiliser ce plugin, tapez ce qui suit :

pi@framboise:~ $ sudo certbot --nginx -d mondomaine.fr -d www.mondomaine.fr
<...>
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): votre@email.fr
<...>
Please read the Terms of Service at
<...>
(A)gree/(C)ancel: A
<...>
Would you be willing to share your email address with <...>
<...>
(Y)es/(N)o: N
<...>
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
<...>
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
<...>
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
<...>

Cette commande lance certbot avec le plugin –nginx, en utilisant -d pour spécifier les noms de domaine pour lesquels nous voulons un certificat valide.

La première fois que vous exécutez certbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation.

Puis certbot vérifie que vous êtes le propriétaire du domaine pour lequel vous demandez un certificat.

Si cela réussit, certbot vous demande comment configurer vos paramètres HTTPS :

  1. Pas de redirection - Ne faites plus de modification à la configuration du serveur Web.
  2. Redirection - Rediriger toutes les demandes vers un accès sécurisé HTTPS.

La configuration est mise à jour et Nginx se recharge pour récupérer les nouveaux paramètres.

certbot termine avec un message vous indiquant que le processus a réussi et où sont stockés vos certificats :

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2017-10-23. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again with the
   "certonly" option. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Vos certificats sont maintenant téléchargés, installés et configurés.

Rechargez votre site Web en utilisant https:// et examinez l'icône de cadenas de votre navigateur qui doit être verte.

Si vous testez votre serveur à l'aide du test de https://www.ssllabs.com/ssltest/analyze.html (renseignez votre domaine et testez), il obtiendra une note A.

Vérification du renouvellement automatique de Certbot

Les certificats de Let’s Encrypt ne sont valables que quatre-vingt-dix jours pour encourager les utilisateurs à automatiser leur processus de renouvellement de certificat.

certbot s'en charge pour nous en ajoutant un script de renouvellement à /etc/cron.d.

Ce script s'exécute deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant l'expiration.

Pour tester le processus de renouvellement, vous pouvez effectuer un essai avec certbot :

pi@framboise:~ $ sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt.

Si nécessaire, Certbot renouvellera vos certificats et rechargera Nginx pour récupérer les modifications.

Si le processus de renouvellement automatisé échoue, Let’s Encrypt enverra un message à l'e-mail que vous avez spécifié, vous avertissant que votre certificat est sur le point d'expirer.

Conclusion

Dans ce didacticiel, nous avons installé le client certbot Let’s Encrypt, téléchargé des certificats SSL pour notre domaine, configuré Nginx pour utiliser ces certificats et configuré le renouvellement automatique des certificats.

Problèmes connus

Voir aussi