GNU/Linux >> Tutoriels Linux >  >> Cent OS

SSL gratuit pour Nginx sur Centos par Let's encrypt

Aperçu

Let's encrypt est une autorité de certification qui fournit un moyen simple d'obtenir gratuitement un certificat SSL/TLS pour votre site Web, permettant ainsi le cryptage https sur les serveurs Web. Let's Encrypt simplifie l'achat et l'installation d'un certificat SSL à l'aide d'un logiciel appelé CertBot. Ce logiciel client sert un processus entièrement automatisé pour les serveurs Web apache. Cependant, les certificats SSL gratuits de Let's Encrypt peuvent être installés manuellement sur n'importe quel serveur Web avec quelques ajustements internes.

Dans ce tutoriel, nous allons démontrer la procédure d'utilisation du certbot-auto Let's Encrypt client pour obtenir un certificat SSL gratuit et l'utiliser avec Nginx sur Ubuntu 14.04. Ce tutoriel vous expliquera également comment renouveler automatiquement votre certificat SSL. Si vous utilisez un autre serveur Web, suivez simplement la documentation de votre serveur Web pour savoir comment utiliser le certificat avec votre configuration.

Prérequis

  • Utilisateur non root avec privilèges Sudo
  • Vous devez posséder ou avoir un contrôle administratif sur le domaine pour lequel vous souhaitez obtenir un certificat SSL.
  • Un enregistrement A créé sous le panneau DNS, qui pointe votre domaine vers l'adresse IP publique de votre serveur. Ceci est nécessaire en raison de la façon dont Let's Encrypt valide que vous possédez le domaine pour lequel il émet un certificat. Par exemple, si vous souhaitez obtenir un certificat pour example.com , ce domaine doit être résolu sur votre serveur pour que le processus de validation fonctionne. Notre configuration utilisera example.com et www.example.com comme noms de domaine, donc les deux enregistrements DNS sont requis

Étape 1 - Installer Let's Encrypt Client

Au départ, vous devez télécharger le logiciel client CertBot sur votre serveur. Vous pouvez télécharger CertBot sur le site officiel de l'EFF.

Téléchargez le logiciel CertBot dans le répertoire /usr/local/sbin directory on your server:

cd /usr/local/sbin
sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin   
sudo wget https://dl.eff.org/certbot-auto
[sudo] password for example: 
--2016-11-28 13:26:28--  https://dl.eff.org/certbot-auto
Resolving dl.eff.org... 173.239.79.196
Connecting to dl.eff.org|173.239.79.196|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 44442 (43K) [text/plain]
Saving to: `certbot-auto'

100%[======================================>] 44,442       154K/s   in 0.3s    

2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]

Cert-Bot est maintenant téléchargé dans /usr/local/sbin sur votre serveur. Rendez maintenant le fichier exécutable en saisissant la commande suivante :

sudo chmod a+x /usr/local/sbin/certbot-auto

Le logiciel Cerbot-auto est maintenant prêt à être installé.

Étape 2 — Obtenir un certificat

Il existe plusieurs façons d'obtenir un certificat SSL de Let's Encrypt via divers plugins. Vous devez obtenir un plugin d'authentification pour acquérir un certificat SSL. Assurez-vous que ces plugins n'obtiendront que le certificat et que vous devez installer le certificat manuellement.

Dans ce didacticiel, utilisons un plugin appelé Webroot pour l'authentification.

Plug-in Webroot

Le plugin Webroot génère un fichier exclusif dans le répertoire / .well-known au sein de la racine de votre document, accessible par Let's Encrypt via votre serveur Web et cela achèvera la validation de votre autorité sur le domaine. Vous devrez peut-être configurer l'autorisation pour le fichier dans / .well-known.

Si vous n'avez pas encore installé Ngnix, utilisez les commandes ci-dessous pour l'installer :

sudo yum update
sudo yum install ngnix

Afin de rendre le fichier accessible à certbot-auto, apportons les modifications nécessaires au fichier de configuration Nginx. Le fichier de configuration ngnix est placé dans le répertoire /etc/nginx/sites-available/default, par défaut. Modifions le fichier de configuration :

sudo vim /etc/nginx/sites-available/default

Ajoutez le bloc d'emplacement suivant au fichier :

Ajouter au serveur SSL block
server {
        . . .

        location ~ /.well-known {
                allow all;
        }

        . . .
}

Vous voudrez également rechercher la racine de votre document en recherchant la root directive, car le chemin est requis pour utiliser le plugin Webroot. Si vous utilisez le fichier de configuration par défaut, la racine sera /usr/share/nginx/html .

Enregistrez le fichier en appuyant sur Échap suivi de :wq ! et appuyez sur la touche Entrée.

Vous pouvez vérifier si le fichier de configuration contient des erreurs de syntaxe :

sudo nginx -t

Si vous trouvez que le fichier de configuration est exempt d'erreurs de syntaxe, redémarrez le service ngnix

sudo service nginx restart

Maintenant, nous pouvons utiliser le plugin webroot pour la validation, car nous connaissons l'emplacement exact du chemin webroot. Utilisez la commande suivante pour demander un certificat SSL à l'aide du plug-in Webroot :

certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com

Les noms de domaine doivent être spécifiés avec le -d option. Si vous souhaitez qu'un seul certificat fonctionne avec plusieurs noms de domaine (par exemple, example.com et www.example.com ), assurez-vous de tous les inclure, en commençant par le domaine de niveau le plus élevé (par exemple, example.com ).

Remarque : Le certbot-auto le logiciel nécessite des privilèges de superutilisateur, vous devrez donc entrer votre mot de passe si vous n'avez pas utilisé sudo récemment.

Lorsque certbot-auto s'initialise, vous serez invité à fournir certaines informations. Les invites exactes peuvent varier selon que vous avez utilisé le certbot-auto client avant. Fournissez les informations nécessaires et sélectionnez Accepter à la fin.

Sortie :
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to [email protected]
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your
   cert will expire on 2016-03-15. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   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 Let's
   Encrypt so making regular backups of this folder is ideal.
 - If like Let's Encrypt, please consider supporting our work by:

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

Notez le chemin et la date d'expiration de la sortie.

Remarque sur le pare-feu : Si vous recevez une erreur telle que Failed to connect to host for DVSNI challenge , le pare-feu de votre serveur devra peut-être être configuré pour autoriser le trafic TCP sur le port 80 et 443 .

Remarque : Si votre domaine route via un service DNS comme CloudFlare, vous devrez le désactiver temporairement jusqu'à ce que vous ayez obtenu le certificat.

Fichiers de certificat

Après avoir obtenu le certificat, vous aurez les fichiers encodés PEM suivants :

  • cert.pem : Le certificat de votre domaine
  • chaîne.pem : Le certificat de la chaîne Let's Encrypt
  • chaîne complète.pem :cert.pem et chain.pem combiné
  • privkey.pem : La clé privée de votre certificat

Vous pouvez vérifier que les fichiers existent en exécutant cette commande (en remplaçant votre nom de domaine) :

sudo ls -l /etc/letsencrypt/live/your_domain_name

La sortie doit être les quatre fichiers de certificat mentionnés précédemment. Dans un instant, vous allez configurer votre serveur Web pour utiliser fullchain.pem comme fichier de certificat, et privkey.pem comme fichier de clé de certificat.

Générer un groupe Diffie-Hellman fort

Pour augmenter encore la sécurité, générez un groupe Diffie-Hellman fort en utilisant la commande :

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Le chemin du groupe DH serait /etc/ssl/certs/dhparam.pem 2048

Étape 3 - Configurer TLS/SSL sur le serveur Web (Nginx)

Vous devez maintenant configurer votre serveur Web Nginx pour l'utiliser. Editez la configuration Nginx qui contient votre bloc serveur :

sudo nano /etc/nginx/sites-available/default

Trouvez le server bloc. Commentaire ou supprimer les lignes qui configurent ce bloc serveur pour écouter sur le port 80. Dans la configuration par défaut, ces deux lignes sont à supprimer :

Les suppressions de configuration Nginx
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

Nous allons configurer ce bloc de serveur pour écouter sur le port 443 avec SSL activé à la place. Au sein de votre server { block, ajoutez les lignes suivantes mais remplacez toutes les instances de example.com avec votre propre domaine :

Ajouts de configuration Nginx — 1 sur 3
        listen 443 ssl;

        server_name example.com www.example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Cela permet à votre serveur d'utiliser SSL et lui dit d'utiliser le certificat SSL Let's Encrypt que nous avons obtenu précédemment.

Pour n'autoriser que les protocoles et chiffrements SSL les plus sécurisés, et utiliser le groupe Diffie-Hellman fort que nous avons généré, ajoutez les lignes suivantes au même bloc de serveur :

Ajouts de configuration Nginx — 2 sur 3
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security max-age=15768000;

Enfin, en dehors du bloc de serveur d'origine (qui écoute sur HTTPS, port 443), ajoutez ce bloc de serveur pour rediriger HTTP (port 80) vers HTTPS.

Ajouts de configuration Nginx — 3 sur 3
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Enregistrer et quitter.

Testez le fichier de configuration pour les erreurs de syntaxe en tapant :

sudo nginx -t

Une fois que vous avez vérifié qu'il n'y a pas d'erreurs de syntaxe, appliquez les modifications en redémarrant Nginx :

sudo service nginx restart

Le certificat Let's Encrypt TLS/SSL est maintenant en place. À ce stade, vous devez tester le fonctionnement du certificat TLS/SSL en accédant à votre domaine via HTTPS dans un navigateur Web.

Vous pouvez utiliser le rapport Qualys SSL Labs pour voir comment votre configuration de serveur se classe :

Dans un navigateur Web :
https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Cette configuration SSL devrait signaler un A+ note.

Étape 4 - Configurer le renouvellement automatique

Les certificats Let's Encrypt sont valides pendant 90 jours, mais il est recommandé de renouveler les certificats tous les 60 jours pour permettre une marge d'erreur. Au moment d'écrire ces lignes, le renouvellement automatique n'est toujours pas disponible en tant que fonctionnalité du client lui-même, mais vous pouvez renouveler manuellement vos certificats en exécutant le certbot-auto client avec le renew option.

Pour déclencher le processus de renouvellement pour tous les domaines installés, exécutez cette commande :

certbot-auto renew

Parce que nous avons récemment installé le certificat, la commande ne vérifiera que la date d'expiration et imprimera un message informant que le certificat n'est pas encore en cours de renouvellement. Le résultat devrait ressembler à ceci :

Sortie :
Checking for new version...
Requesting root privileges to run letsencrypt...
   /home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.

Notez que si vous avez créé un certificat groupé avec plusieurs domaines, seul le nom de domaine de base sera affiché dans la sortie, mais le renouvellement doit être valide pour tous les domaines inclus dans ce certificat .

Un moyen pratique de vous assurer que vos certificats ne seront pas obsolètes consiste à créer une tâche cron qui exécutera périodiquement la commande de renouvellement automatique pour vous. Étant donné que le renouvellement vérifie d'abord la date d'expiration et n'exécute le renouvellement que si le certificat est à moins de 30 jours de l'expiration, il est prudent de créer une tâche cron qui s'exécute chaque semaine ou même chaque jour, par exemple.

Modifions le crontab pour créer un nouveau travail qui exécutera la commande de renouvellement chaque semaine. Pour modifier la crontab pour l'utilisateur root, exécutez :

sudo crontab -e

Ajoutez les lignes suivantes :

entrée crontab
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload

Enregistrer et quitter. Cela créera une nouvelle tâche cron qui exécutera le certbot-auto renew commande tous les lundis à 2h30, et recharger Nginx à 2h35 (le certificat renouvelé sera donc utilisé). La sortie produite par la commande sera redirigée vers un fichier journal situé dans /var/log/le-renewal.log .


Cent OS
  1. Comment installer un certificat SSL sur Apache pour CentOS 7

  2. Sécuriser ISPConfig 3.1 avec un certificat SSL Lets Encrypt gratuit

  3. Let's Encrypt :Obtenez un certificat SSL gratuit avec Certbot

  4. Sécurisez Apache avec Let's Encrypt sur CentOS 7 - Processus étape par étape ?

  5. Comment obtenir un certificat SSL gratuit avec SSL It ! et Let's Encrypt sur Plesk

Comment installer un certificat SSL gratuit pour Apache sur CentOS 8

Comment installer un certificat SSL gratuit pour Nginx sur CentOS 8

Comment activer le certificat SSL gratuit Let's encrypt pour mon domaine dans Plesk ?

Sécurisez Nginx avec le certificat SSL Let's Encrypt sur Ubuntu 18.04

Comment sécuriser Nginx avec le certificat SSL Let's Encrypt

Comment sécuriser Nginx avec Let's Encrypt sur CentOS 8