Cryptons les données

Updated 29 Juin 2020

Introduction

Let’s Encrypt est une autorité de certification qui fournit gratuitement des certificats X.509 pour le cryptage TLS (HTTPS). Il est entièrement automatisé.

Let's Encrypt vise à rendre les connexions cryptées aux serveurs web (HTTPS) omniprésentes. Contrairement aux autorités de certification commerciales, ce projet n'exige pas le paiement, la reconfiguration des serveurs Web, le courrier électronique, la soumission de certificats expirés. Tout cela simplifie considérablement l'installation et la configuration du TLS-encryption.

Configurer le client Let's Encrypt

Installez le client Let's Encrypt:

emerge -a app-crypt/certbot

Enregistrez votre compte dans Let's Encrypt ACME (Automated Certificate Management Environment). Indiquez l'adresse e-mail à laquelle les messages importants seront envoyés :

certbot register --agree-tos -m myemail@example.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
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: No

IMPORTANT NOTES:
 - 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.

Une arborescence sera créée dans le répertoire /etc/letsencrypt/ pour gérer les certificats (stockage, mise à jour, révocation, suppression).

Avis d'utilisateurs

tree /etc/letsencrypt

/etc/letsencrypt/
├── accounts
│   └── acme-v01.api.letsencrypt.org
│       └── directory
│           └── 091f17d3f1d16083e1f0e70b463452cc
│               ├── meta.json
│               ├── private_key.json
│               └── regr.json
└── renewal-hooks
    ├── deploy
    ├── post
    └── pre

8 directories, 3 files


Obtenir un certificat

Obtenir un certificat sans passer par un serveur web

Cette disposition est valable s'il n'y a pas de serveur web sur l'hôte spécifié.

Important

Pour obtenir le certificat, l'hôte doit être accessible depuis le réseau Internet au port 80 et au nom de domaine spécifié.

Pour obtenir un certificat pour le domaine example.org :

certbot certonly --preferred-challenges http --standalone -d example.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.org
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.org/privkey.pem
   Your cert will expire on 2018-07-18. 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"
 - 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

Remplacez example.org par votre domaine ici et partout par la suite. Le certificat et les clés privées seront sauvegardés dans /etc/letsencrypt/live/example.org/.

Avis d'utilisateurs

tree /etc/letsencrypt/live/example.org

/etc/letsencrypt/live/example.org
├── cert.pem -> ../../archive/example.org/cert1.pem
├── chain.pem -> ../../archive/example.org/chain1.pem
├── fullchain.pem -> ../../archive/example.org/fullchain1.pem
├── privkey.pem -> ../../archive/example.org/privkey1.pem
└── README

0 directories, 5 files


Obtenir un certificat avec Nginx

Cette disposition est valable si un serveur Nginx fonctionne déjà sur l'hôte spécifié.

Important

Pour obtenir un certificat, l'hôte doit être accessible depuis Internet par le port 80 via le nom de domaine spécifié.

Créez les paramètres à ajouter aux configurations de serveur:

mkdir /var/calculate/www/acme

/etc/nginx/acme.conf
location /.well-known {
    autoindex off;
    root /var/calculate/www/acme;
}

Inclure ACME dans la configuration example.org et redémarrer Nginx :

/etc/nginx/sites-enabled/example.org
server {
    listen 80;
    server_name www.example.org example.org;

    access_log /var/log/nginx/example.org.access_log main;
    error_log /var/log/nginx/example.org.error_log info;

    include acme.conf;

    root /var/calculate/www/example.org/htdocs;
}

Lancez la commande suivante afin d'obtenir un certificat pour example.org et www.example.org :

certbot certonly --webroot --webroot-path /var/calculate/www/acme -d example.org -d www.example.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None

Performing the following challenges:
http-01 challenge for example.org
http-01 challenge for www.example.org
Using the webroot path /var/calculate/www/acme for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.org/privkey.pem
   Your cert will expire on 2018-07-18. 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"
 - 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

Obtenir des certificats pour les stocker sur un serveur séparé

Cela a du sens s'il n'y a pas de service web sur le serveur de stockage.

Important

Pour obtenir un certificat, le serveur Web qui transmettra la demande au serveur de stockage doit être accessible sur Internet via le port 80 et le nom de domaine spécifié.

Sur le serveur web, créez un fichier permettant de rediriger ACME vers ~certbot.local.example.org:~~

/etc/nginx/acme-proxy.conf
location /.well-known {
    proxy_pass http://certbot.local.example.org:80/.well-known;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Activez le proxy ACME dans les paramètres du serveur pour example.org et redémarrez nginx :

/etc/nginx/sites-enabled/example.org
server {
    listen 80;
    server_name www.example.org example.org;

    access_log /var/log/nginx/example.org.access_log main;
    error_log /var/log/nginx/example.org.error_log info;

    include acme-proxy.conf;

    root /var/calculate/www/example.org/htdocs;
}

Installez Let's Encrypt sur le serveur de stockage et enregistrez le compte comme[expliqué ci-dessus] (lets_encrypt#poluchenie_sertifikata_dlia_domennogo_imeni).

Lancez la commande suivante sur le serveur de stockage afin d'obtenir un certificat pour ~~www.example.org :

certbot certonly --preferred-challenges http --standalone -d example.org -d www.example.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.org
http-01 challenge for www.example.org
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.org/privkey.pem
   Your cert will expire on 2018-07-19. 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"
 - 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

Ces certificats doivent être transférés au serveur Web.

Créez d'abord un répertoire pour stocker un certificat Nginx et modifiez les droits d'accès:

mkdir -p /etc/nginx/ssl/example.org

chmod 550 -R /etc/nginx/ssl

chown -R nginx: /etc/nginx/ssl

Générer une clé SSL pour accéder au serveur Web à partir du site de stockage:

ssh-keygen -f /etc/letsencrypt/keys/certbot

Ajoutez une clé publique /etc/letsencrypt/keys/certbot.pub pour une connexion sans mot de passe au serveur:

ssh-copyid -i /etc/letsencrypt/keys/certbot.pub root@weberver

Créez un script pour transférer les certificats vers Nginx:

/var/calculate/bin/deploy-nginx
#!/bin/sh
CERTPATH=$1
HOST=$2
SITE=$(basename $CERTPATH)

scp -i /etc/letsencrypt/keys/certbot $CERTPATH/fullchain.pem root@$HOST:/etc/nginx/ssl/$SITE/
scp -i /etc/letsencrypt/keys/certbot $CERTPATH/privkey.pem root@$HOST:/etc/nginx/ssl/$SITE/
ssh -i /etc/letsencrypt/keys/certbot root@$HOST "/etc/init.d/nginx restart"

Ce script doit entrer des options : les chemins (/etc/letsencrypt/live/example.org/) pour les certificats à transférer et l'adresse du serveur Web (webserver in the example above) pour accéder via SSH.

Transférez les certificats sur le serveur:

/var/calculate/bin/deploy-nginx /etc/letsencrypt/live/example.org webserver
fullchain.pem                                                                        100% 3875     5.1MB/s   3.8KB/s   00:00    
privkey.pem                                                                          100% 1704     2.6MB/s   1.7KB/s   00:00    
 * Checking nginx' configuration ... [ ok ]
 * Stopping nginx ... [ ok ]
 * Starting nginx ... [ ok ]

Le certificat et la clé seront maintenant copiés dans le répertoire /etc/nginx/ssl/ssl/example.org/ sur le serveur Web.

Obtenir un certificat Wildcard

Les certificats de domaines Wildcar doivent être confirmés via DNS. Pour vérifier les enregistrements, utilisez dig. Install net-dns/bind-tools.

emerge -a net-dns/bind-tools

Enregistrez le compte Cryptons ACME (Automated Certificate Management Environment) de la deuxième version, en précisant l'adresse e-mail à laquelle les messages importants seront envoyés à l'avenir:

certbot register --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -m myemail@example.org
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
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

IMPORTANT NOTES:
 - Les informations d'identification de votre compte ont été sauvegardées dans votre Certbot
   sous /etc/letsencrypt. Vous devriez faire une
   sauvegarde sécurisée de ce dossier maintenant. Ce répertoire de configuration
   contiennent également des certificats et des clés privées obtenus par Certbot ainsi
   faire des sauvegardes régulières de ce dossier est idéal.

Obtenez les certificats pour example.org et www.example.org. Lors de l'exécution de votre commande, vous serez invité à créer des enregistrements TXT dans DNS. Celles-ci sont ajoutées manuellement, en utilisant l'hébergement DNS.

certbot certonly --manual-public-ip-logging-ok --preferred-challenges dns -d "example.org,*.example.org" --manual --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.org
dns-01 challenge for example.org

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.org with the following value:

Exqq5xdhLdCfjdbEGfZ81AY1g7eJmaiiyA5HQDyjr1g

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.org with the following value:

gl8yUUx71GX3Hv-cTZcM1K29ayFy5IMthV2IIii6dKs

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.org/privkey.pem
   Your cert will expire on 2018-07-19. 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"
 - 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

Exécutez ce qui suit pour vérifier l'entrée TXT :

dig -t TXT _acme-challenge.example.org
; <<>> DiG 9.11.2-P1 <<>> -t txt _acme-challenge.home.icerider.xyz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4898
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_acme-challenge.home.icerider.xyz. IN  TXT

;; ANSWER SECTION:
_acme-challenge.example.org. 3599   IN TXT  "Exqq5xdhLdCfjdbEGfZ81AY1g7eJmaiiyA5HQDyjr1g"
_acme-challenge.example.org. 3599   IN TXT  "gl8yUUx71GX3Hv-cTZcM1K29ayFy5IMthV2IIii6dKs"

;; Query time: 36 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Пт апр 20 14:29:32 MSK 2018
;; MSG SIZE  rcvd: 174

Il n'y a pas de mise à jour automatique pour les certificats obtenus manuellement, il faut donc lancer une procédure d'actualisation distincte.

Mise à jour des certificats

Pour visualiser la liste des certificat, exécutez la commande suivante :

certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: home.example.org
    Domains: home.example.org *.home.example
    Expiry Date: 2018-07-19 10:47:22+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/home.example.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/home.example.ru/privkey.pem
  Certificate Name: example.org
    Domains: example.org www.example.org
    Expiry Date: 2018-07-18 11:02:43+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/example.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.org/privkey.pem
-------------------------------------------------------------------------------

Les certificats Let's Encrypt sont émis pour 3 mois, par conséquent il est nécessaire de les mettre à jour au moins un mois à l'avance.

Pour mettre à jour les certificats, exécutez:

certbot renew
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.org.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.org/fullchain.pem expires on 2018-07-19 (skipped)
  /etc/letsencrypt/live/example.com/fullchain.pem expires on 2018-07-18 (skipped)
No renewals were attempted.

Cette commande gère les fichiers de configuration dans /etc/letsencrypt/renewal et met à jour les certificats si nécessaire.

Vous pouvez créer un fichier cron pour une mise à jour automatique:

/etc/cron.d/certbot
30 4 * * 1 root /usr/bin/certbot renew >> /var/log/cron-renew.log

Selon les paramètres ci-dessus, chaque lundi à 16h30, vous recevrez de nouveaux certificats SSL pour remplacer les anciens, le cas échéant. La mise à jour sera enregistrée.

Lors de la mise à jour des certificats, plusieurs actions sont réalisées : redémarrage des services qui les utilisent, déplacement des certificats vers d'autres ordinateurs, etc. Le répertoire /etc/letsencrypt/renewal-hooks/deploy/ sera utilisé à ces fins. Les scripts stockés dans ce dossier seront exécutés chaque fois qu'au moins un certificat aura été mis à jour.

Important

Les scripts dans /etc/letsencrypt/renewal-hooks/deploy/ doivent avoir des droits d'exécution.

Exemple de redémarrage de Nginx lors de la mise à jour des certificats

Cet exemple décrit une situation où des certificats sont obtenus via Nginx situé sur le même ordinateur.

/etc/letsencrypt/renewal-hooks/deploy/restart-nginx
#!/bin/bash
/etc/init.d/nginx restart

Définissez les permissions pour le script:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/restart-nginx

Exemple de mise à jour d'un certificat de serveur Web à partir du stockage de certificats

Dans l'exemple ci-dessous, push-tonginx appellera un autre script pour mettre à jour les certificats sur webserver lors de la mise à jour du certificat pour example.org et redémarrer Nginx sur webserver.

/etc/letsencrypt/renewal-hooks/deploy/push-to-nginx
#!/bin/bash
set -e

for domain in $RENEWED_DOMAINS; do
    case $domain in
    example.org)
        /var/calculate/bin/deploy-nginx $RENEWED_LINEAGE webserver
        ;;
    esac
done

Définissez les permissions pour le script:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/push-to-nginx