Automatisez la gestion des certificats SSL/TLS avec Dehydrated
A l’heure de l’agilité et de l’automatisation, tout le monde parle du DevOps pour la mise en œuvre rapide des applications et de leurs évolutions.
Mais peu de monde connait le SecOps.
Cette méthode permet pourtant l’automatisation de l’implémentation et de la gestion de la sécurité.
Grace à SecOps, adieu les angoisses du renouvellement de vos certificats, l’exploitation est déjà planifiée.
La sécurité pour tous en quelques lignes!
Let’s Encrypt est une autorité de certification SSL/TLS publique basée sur le protocole ACME.
Ce protocole permet de délivrer des certificats de façon automatisée pour une courte durée.
Pour faire une demande de certificat et de renouvellement, nous allons utiliser dehydrated.
Une collection de scripts bash qui automatise et donc facilite la vie.
Voici un exemple de demande de certificat pour un serveur web avec nginx.
Installation et configuration
La première étape est évidement d’installer dehydrated et de le configurer en renseignant le FQDN du serveur web.
zypper -n in dehydrated nginx echo 'my.domain.fr > mydomain' > /etc/dehydrated/domains.txt
Challenge ACME
Afin de vérifier que vous êtes bien le propriétaire du site pour lequel vous demandez un certificat, Let’s Encrypt se base sur un challenege – c’est-à-dire publier sur votre site à une URL précise une clef donnée par l’autorité.
Dehydrated va automatiquement faire la demande de challenge et publier la réponse.
Charge à nous de configurer nginx pour revoyer les appels à l’URL « .well-known/acme-challenge » dans le dossier de dehydrated.
cat /etc/nginx/vhosts.d/wellknow.conf server { location ^~ /.well-known/acme-challenge { alias /var/lib/acme-challenge; } } systemctl enable nginx systemctl start nginx
Enregistrement du certificat
Etape suivante, la demande et la création des fichiers clefs et certificats en eux-même.
Les fichiers créés sont précieux, attention à ne pas publier votre clef privée (privkey.pem).
dehydrated --register --accept-terms dehydrated -c -f /etc/dehydrated/config
Configuration de nginx
Nous sommes maintenant prêt à configurer nginx pour publier notre site web en SSL/TLS.
Nous créerons un fichier /etc/nginx/vhosts.d/sslsite.conf dans lequel nous renseignons les chemins des fichiers fullchain.pem et privkey.pem
cat /etc/nginx/vhosts.d/sslsite.conf server { listen 443 default_server ssl; server_name my.domain.fr; # ssl_protocols TLSv1.2 TLSv1.3; ssl_certificate /etc/dehydrated/certs/mydomain/fullchain.pem; ssl_certificate_key /etc/dehydrated/certs/mydomain/privkey.pem; location / { root /srv/www/htdocs/; index index.html; } }
Créons la plus petite page web possible et testons.
echo "Hello mydomain" > /srv/www/htdocs/index.html systemctl restart nginx
Automatisation du renouvellement
Un certificat SSL/TLS n’est jamais valide à vie. Il a une date d’expiration.
Dans le cas de Let’s Encrypt, le certificat est valable pour 3 mois.
Il est donc obligatoire de mettre en place un système de vérification de la validité et du renouvellement du certificat.
Pour cela créons un script dans cron pour faire le test tous les jours.
cat /etc/cron.daily/dehydeated #!/bin/bash /usr/bin/dehydrated -c -f /etc/dehydrated/config >> /var/log/dehydrated.log chmod +x /etc/cron.daily/dehydeated
La sécurité est un point majeure de la gestion du parc IT.
Il convient de l’automatiser.
No comments yet