GNU/Linux >> Tutoriels Linux >  >> Debian

Installer Lets Encrypt and Secure Nginx avec SSL/TLS dans Debian 9

Ce tutoriel vous montrera comment installer et sécuriser un serveur Web Nginx sur Debian 9 avec un certificat TLS délivré gratuitement par l'autorité de certification Let's Encrypt. De plus, nous configurerons le renouvellement automatique des certificats Lets' Encrypt TLS à l'aide d'une tâche cron avant l'expiration des certificats.

TLS, également connu sous le nom de Transport Layer Security, est un protocole réseau qui utilise des certificats SSL pour chiffrer le trafic réseau qui circule entre un serveur et un client, ou entre un serveur Web, tel qu'un serveur Nginx, et un navigateur. Toutes les données échangées entre ces deux entités sont sécurisées et la connexion ne peut pas être déchiffrée même si elle est interceptée à l'aide d'une technique telle que l'attaque par un homme du milieu ou le reniflage de paquets. Le certbot Le logiciel de package est l'utilitaire client officiel fourni par Let's Encrypt CA qui peut être utilisé dans le processus de génération et de téléchargement de certificats Let's Encrypt gratuits dans Debian.

Exigences

  • Installer la pile LEMP dans Debian 9.
  • Un nom de domaine public enregistré avec des enregistrements DNS appropriés (enregistrements A ou enregistrements CNAME pour les sous-domaines).
  • Accès direct à la console du serveur ou accès SSH à distance au serveur.
  • Un compte utilisateur avec des privilèges root ou un accès direct au compte root.

Installer l'utilitaire client Certbot

Pour installer Let's Encrypt cerbot client dans Debian 9 à partir des dépôts officiels Debian, ouvrez un terminal et lancez la commande suivante avec les privilèges root, comme illustré dans la capture d'écran suivante.

apt-get install certbot

L'apt de Debian L'utilitaire, qui est l'interface de ligne de commande du gestionnaire de paquets principal de Debian, vous demandera, après quelques vérifications préliminaires, si vous acceptez de continuer l'installation du paquet certbot et de toutes ses dépendances requises. Pour accepter le processus d'installation du logiciel, répondez par oui (y) dans l'invite de la console du serveur.

Obtenir le certificat Let's Encrypt

Pour générer et télécharger des certificats Let's Encrypt pour un domaine, assurez-vous d'abord que le serveur Web Nginx est opérationnel et qu'au moins le port 80 est accessible depuis Internet. Pour vérifier si Nginx est en cours d'exécution, exécutez les commandes suivantes avec les privilèges root.

sudo systemctl status nginx

Si le serveur n'est pas déjà en cours d'exécution, démarrez le démon Nginx avec la commande ci-dessous.

sudo systemctl start nginx

Si vous avez un pare-feu commun installé dans Debian, tel que le pare-feu UFW, qui bloque toutes les connexions entrantes sur les ports 80 et 443, lancez les commandes ci-dessous pour ouvrir le port HTTP et HTTPS dans le système.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Afin d'obtenir des certificats pour votre domaine, exécutez le cerbot commande dans la console avec les paramètres et drapeaux suivants, comme expliqué ci-dessous. Exécutez la commande avec les privilèges root et fournissez votre nom de domaine et tous les autres sous-domaines pour lesquels vous souhaitez obtenir des certificats en utilisant le –d drapeau. Fournissez également le --standalone option afin que certbot n'interfère pas avec les fichiers de configuration Nginx. Le serveur Nginx doit être arrêté lors de l'émission de certificats à l'aide de cette option.

La syntaxe de la commande cerbot :

sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com

Lorsque vous exécutez la commande certbot pour la première fois et obtenez le certificat, vous serez invité à ajouter votre adresse e-mail et à accepter les conditions d'utilisation de Let's Encrypt. Écrivez ‘un ' pour accepter les conditions de service 'non' de ne pas partager votre adresse e-mail avec les partenaires de Let's Encrypt. Enfin, après avoir obtenu le certificat pour votre domaine, lisez les notes de bas de page pour localiser le chemin du système de certificats et la date à laquelle ils expireront.

Méthode alternative pour obtenir un certificat SSL Let's encrypt

Pour obtenir un certificat Let's Encrypt via le "webroot " utilisez la syntaxe ci-dessous. Ajoutez le répertoire racine Web Nginx, qui se trouve par défaut dans /var/www/html/ chemin du système, tout en exécutant la commande certbot avec le --webroot et –w drapeaux. Assurez-vous également que Nginx dispose des autorisations d'écriture complètes sur le répertoire racine Web afin de créer le /.well-known répertoire.

Le --webrot L'option pour cerbot vous demandera également d'ajouter votre adresse e-mail pour le renouvellement du certificat et les avis de sécurité. Certbot client a un code intégré qui peut détecter une fausse adresse e-mail. Vous devez fournir une adresse e-mail accessible au public afin de continuer à obtenir un certificat.

certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]  #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]
 
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
 
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: n
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.domain.com
Using the webroot path /var/www/html/  for all unmatched domains.
Waiting for verification...
Cleaning up challenges
 
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your
   cert will expire on 2017-12-28. To obtain a new or tweaked version
   of this certificate in the future, simply run certbot again. 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
Le répertoire
   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

 

Configurer Nginx pour TLS (SSL)

Un fichier de configuration TLS par défaut complet de Nginx pour un domaine devrait ressembler à l'extrait de fichier ci-dessous.

/etc/nginx/sites-enabled/default-ssl exemple de fichier :

    server {
                    listen 443 ssl default_server;
                    listen [::]:443 ssl default_server;
      
                server_name  www.yourdomain.com yourdomain.com;
                #server_name _;
                               
                root /var/www/html;
                               
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
              
               #SSL Certificates
                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
                ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
                ssl_dhparam /etc/nginx/dhparam.pem;
               
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
               ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
    #includeSubDomains" always;
 
                location / {
        index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
               
                set $cache_uri $request_uri;
               
                location ~ /.well-known {
                allow all;
                                }
              
                #
                #             # With php-fpm (or other unix sockets):
                                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }

               # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
               
    }

Les lignes de code pour le traitement des scripts PHP via FastCGI Process Manager se trouvent également dans cet extrait et sont représentées par les lignes suivantes.

location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                }

Installer les certificats Let's Encrypt dans Nginx

Les certificats et les clés Let's Encrypt sont stockés dans /etc/letsencrypt/live/www.votredomaine.com/ répertoire dans Debian. Les ls La commande sur le répertoire ci-dessus révélera tous les composants du certificat, tels que le fichier de chaîne, le fichier de chaîne complète, la clé privée et le fichier de certificat.

ls /etc/letsencrypt/live/www.yourdomain.com/

Pour installer le certificat Let's Encrypt dans le fichier de configuration TLS du serveur Web Nginx, ouvrez Nginx default-ssl fichier et mettez à jour les lignes ci-dessous pour refléter les chemins d'accès aux fichiers de certificat Let's Encrypt pour votre domaine, comme indiqué dans l'extrait ci-dessous.

nano /etc/nginx/sites-enabled/default-ssl

Modifiez les lignes suivantes comme ci-dessous :

                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
                ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";

 

Aussi, si le ssl_dhparam est présente dans la configuration Nginx SSL, vous devez générer une nouvelle clé Diffie-Hellman 2048 bits en exécutant la commande suivante. La génération des paramètres clés Diffie-Hellman devrait prendre un certain temps en fonction du caractère aléatoire ou de l'entropie de votre système.

openssl dhparam –out /etc/nginx/dhparam.pem 2048

Enfin, avant d'activer la configuration Nginx TLS en redémarrant le démon Nginx pour refléter les modifications, vérifiez d'abord les configurations Nginx pour les erreurs de syntaxe potentielles. Ensuite, si le test du fichier de configuration Nginx réussit, redémarrez le démon Nginx pour charger la nouvelle configuration avec les certificats Let's Encrypt, en exécutant les commandes ci-dessous.

nginx -t
service nginx restart

Afin de vérifier si le service nginx possède un socket ouvert en état d'écoute sur le port 443, exécutez netstat commande comme indiqué dans l'extrait ci-dessous.

netstat –tulpn | grep -e 443 -e LISTEN

Vous devez également ouvrir un navigateur et accéder à votre nom de domaine via le protocole HTTPS. Si les certificats Let's Encrypt sont appliqués avec succès dans Nginx, la poignée de main SSL devrait fonctionner correctement sans générer d'erreurs.

https://www.votredomaine.com

Forcer le trafic Web vers HTTPS

Pour forcer les visiteurs de votre domaine à parcourir votre site Web uniquement via le protocole HTTPS, ouvrez le fichier de configuration par défaut compatible avec les sites Nginx et ajoutez la ligne suivante, ce qui force toutes les requêtes qui atteignent le port 80 à être redirigées avec un code d'état 301 (déplacé en permanence) vers le port 443.

nano /etc/nginx/sites-enabled/default

L'instruction de redirection devrait ressembler à celle présentée dans l'extrait ci-dessous.

server_name www.yourdomain.com yourdomain.com;
return         301 https://$server_name$request_uri;

Ensuite, redémarrez le démon Nginx pour appliquer la modification, en exécutant la commande ci-dessous.

service nginx restart

Vérifications finales

Pour étudier plus en détail les certificats générés par Let's Encrypt CA, vous pouvez utiliser un navigateur Web moderne, tel que Chrome. Accédez à votre domaine à partir du navigateur Chrome et appuyez sur la touche de fonction F12 pour ouvrir les outils de développement. Accédez à l'onglet Sécurité et appuyez sur Afficher le certificat pour ouvrir le certificat, comme illustré dans les captures d'écran suivantes.

Un autre utilitaire utile pour enquêter sur les certificats SSL s'avère être le openssl utilitaire de ligne de commande. Afin d'afficher des informations supplémentaires pour un certificat Let's Encrypt CA, exécutez la commande ci-dessous dans une console Linux.

openssl s_client –connect www.yourdomain.com:443

Renouveler automatiquement le certificat Let's Encrypt

Afin de renouveler automatiquement un certificat émis par Let's Encrypt CA avant la date d'expiration, planifiez une tâche crontab pour qu'elle s'exécute une fois par jour à 2h00, en exécutant la commande suivante. La sortie de la tâche cron exécutée sera dirigée vers un fichier journal, stocké dans /var/log/letsencrypt.log

crontab –e

Tâche cron pour renouveler le certificat.

0 2 * * * certbot renew >> /var/log/letsencrypt.log

C'est tout! Pour d'autres configurations plus avancées concernant les certificats et l'utilitaire Let's Encrypt, consultez la documentation officielle à l'adresse Internet suivante https://certbot.eff.org/docs/.


Debian
  1. Sécurisez Nginx avec Lets Encrypt sur Debian 9

  2. Sécurisez Nginx avec Lets Encrypt sur Debian 10 Linux

  3. Sécurisez Apache avec Lets Encrypt sur Debian 10

  4. Installer Automad CMS avec Nginx et Lets Encrypt SSL sur Debian 10

  5. Comment installer OpenCart avec Nginx et Lets Encrypt sur Debian 10

Comment installer MyBB Forum avec Nginx et Lets Encrypt sur Debian 10

Comment installer Wekan Kanban avec Nginx et Lets Encrypt SSL sur Debian 10

Comment installer Drupal avec Nginx et Let's Encrypt SSL sur Debian 11

Comment installer Joomla avec Nginx et Let's Encrypt SSL sur Debian 11

Comment installer WordPress avec Nginx et Let's Encrypt SSL sur Debian 11

Comment installer Nginx avec Let's Encrypt TLS/SSL sur Debian 11 Bullseye