Automatisez la gestion des certificats SSL/TLS avec Dehydrated

Share
Share

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.

Share
(Visited 12 times, 1 visits today)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

No comments yet

Avatar photo
10 371 views