Letsencrypt: certbot & dns ovh

Procédure de création/mise à jour des certificats letsencrypt avec certbot et certbot-dns-ovh

Toutes les infos ont été trouvées sur ce site: https://buzut.net/certbot-challenge-dns-ovh-wildcard/

Installations des outils

# apt-get install python3-pip
# python3 -m pip install --upgrade certbot certbot-dns-ovh

Configuration des journaux

Création du fichier "/etc/logrotate.d/certbot" avec le contenu suivant

/var/log/letsencrypt/*.log {
    monthly
    rotate 6
    compress
    delaycompress
    notifempty
    missingok
    create 640 root adm
}

Création des clés API OVH

Pour que le script puisse vérifier que le domaine vous appartient, il doit avoir l'autorisation de modifier des enregistrements TXT dans les DNS.

Il faut donc créer les clés API avec une date de validité illimitée et pour plus de sécurité, avec une restriction au niveau de l'adresse IP du serveur où sera exécuté le script.

Les droits doivent être renseignés de cette manière:

    GET /domain/zone/*
    PUT /domain/zone/*
    POST /domain/zone/*
    DELETE /domain/zone/*

Une fois les clés créées, il est nécessaire de créer un fichier INI pour y stocker les différentes clés générées.

Créer le fichier ~/.secrets/certbot/ovh.ini avec le contenu suivant:

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxx
dns_ovh_application_secret = xxx
dns_ovh_consumer_key = xxx

Ne pas oublier de fixer les droits sur le fichier :

# chmod 600 ~/.secrets/certbot/ovh.ini

Génération des certificats

Par exemple, pour mon domaine

# certbot certonly --dns-ovh --dns-ovh-credentials ~/.secrets/certbot/ovh.ini -d quennec.fr -d *.quennec.fr

Automatiser le renouvellement

A renseigner dans crontab pour un contrôle tous les lundi à 9:00 et une mise à jour si nécessaire.

00 9 * * 1 /usr/local/bin/certbot certonly --dns-ovh --dns-ovh-credentials /root/.secrets/certbot/ovh.ini --non-interactive --agree-tos --email mon@email.fr -d quennec.fr -d *.quennec.fr && systemctl reload nginx

Configuration vhost nginx

Modifier le fichier vhost correspondant au domaine pour y intégrer les directives liées au certificat letsencrypt.

server {
    listen 443 ssl;
    server_name quennec.fr www.quennec.fr;
    ...
    ssl_certificate /etc/letsencrypt/live/quennec.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/quennec.fr/privkey.pem;
    ...
}