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 utiliseraexample.com
etwww.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 blockserver {
. . .
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 :
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 :
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 3server {
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 crontab30 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
.