Aller au contenu

Ovh letsencrypt

De Marmits Wiki

OVH prend en charge les certificats wildcard via son API. Cela signifie que vous pouvez utiliser l'API OVH pour automatiser la validation DNS requise par Let's Encrypt lors de la génération ou du renouvellement d'un certificat wildcard.

1. Pourquoi utiliser l'API OVH pour les certificats wildcard ?

Validation DNS : Let's Encrypt nécessite une validation DNS pour les certificats wildcard. L'API OVH vous permet d'automatiser la création et la suppression des enregistrements DNS TXT nécessaires.
Automatisation : Avec l'API, vous pouvez intégrer le processus de renouvellement des certificats dans vos scripts ou outils d'automatisation (comme Certbot).
Gestion centralisée : Si vous utilisez OVH comme fournisseur DNS, l'API vous permet de gérer vos enregistrements DNS programmatiquement.

2. Comment utiliser l'API OVH avec Certbot pour les certificats wildcard

Étape 1 : Créer une application API OVH

Allez sur la page des API OVH : https://api.ovh.com/.
Connectez-vous à votre compte OVH.
Créez une nouvelle application API pour obtenir vos clés d'identification :
https://www.ovh.com/auth/api/createToken
Nom de l'application : Par exemple, Certbot Wildcard.
Description : Par exemple, "Renouvellement automatique des certificats wildcard".
Permissions : Accordez les permissions suivantes :
GET /domain/zone/
GET /domain/zone/exemple.com/
GET /domain/zone/exemple.com/status
GET /domain/zone/exemple.com/record
GET /domain/zone/exemple.com/record/*
POST /domain/zone/exemple.com/record
POST /domain/zone/exemple.com/refresh
DELETE /domain/zone/exemple.com/record/*

Notez les identifiants suivants :

Application Key (AK)
Application Secret (AS)
Consumer Key (CK)

Étape 2 : Configurer Certbot avec le plugin DNS OVH

Installez Certbot et le plugin DNS OVH :
Sur Debian/Ubuntu :

sudo apt update
sudo apt install certbot python3-certbot-dns-ovh

Créez un fichier ovh.ini pour stocker vos clés API :

sudo mkdir -p /etc/letsencrypt/.secrets
sudo nano /etc/letsencrypt/.secrets/ovh.ini

Ajoutez les informations suivantes :

dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = VOTRE_APPLICATION_KEY
dns_ovh_application_secret = VOTRE_APPLICATION_SECRET
dns_ovh_consumer_key = VOTRE_CONSUMER_KEY

Remplacez les valeurs par vos clés API OVH. Protégez le fichier :

sudo chmod 600 /etc/letsencrypt/.secrets/ovh.ini

Gestion des token des applications

Dans la console de l'api

https://eu.api.ovh.com/console/?section=%2Fdomain&branch=v1#auth

GET https://eu.api.ovh.com/v1/me/api/application/
GET https://eu.api.ovh.com/v1/me/api/application/{id}
DELETE https://eu.api.ovh.com/v1/me/api/application/{id}

Étape 3 : Obtenir un certificat wildcard

Utilisez Certbot avec le plugin DNS OVH pour obtenir un certificat wildcard :

sudo certbot certonly --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.secrets/ovh.ini -d votre-domaine.com -d *.votre-domaine.com

Certbot utilisera l'API OVH pour créer automatiquement l'enregistrement DNS TXT requis pour la validation.

Étape 4 : Automatiser le renouvellement

Let's Encrypt émet des certificats valides pendant 90 jours. Vous devez automatiser le renouvellement. Ajoutez une tâche cron pour renouveler automatiquement les certificats :

sudo crontab -e

Ajoutez la ligne suivante pour renouveler les certificats tous les jours à minuit :

0 0 * * * certbot renew --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.secrets/ovh.ini --quiet

3. Limitations et considérations

Limites de taux OVH : L'API OVH a des limites de taux (rate limits). Assurez-vous de ne pas dépasser ces limites lors de l'automatisation.

Sécurité des clés API : Protégez vos clés API OVH. Ne les exposez pas publiquement.

Support des sous-domaines dynamiques : Les certificats wildcard ne sont pas idéaux pour les sous-domaines créés dynamiquement (par exemple, dans les environnements SaaS).

4. Exemple complet

Voici un exemple complet pour obtenir un certificat wildcard avec OVH et Certbot :

# Installer Certbot et le plugin DNS OVH
sudo apt update
sudo apt install certbot python3-certbot-dns-ovh

# Créer le fichier de configuration OVH
sudo mkdir -p /etc/letsencrypt/.ovhsecrets
sudo nano /etc/letsencrypt/.ovhsecrets/ovh.ini

# Ajouter les informations suivantes dans ovh.ini
dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = VOTRE_APPLICATION_KEY
dns_ovh_application_secret = VOTRE_APPLICATION_SECRET
dns_ovh_consumer_key = VOTRE_CONSUMER_KEY

# Protéger le fichier
sudo chmod 600 /etc/letsencrypt/.ovhsecrets/ovh.ini

# Obtenir un certificat wildcard
sudo certbot certonly --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.ovhsecrets/ovh.ini -d exemple.com -d *.exemple.com

# Automatiser le renouvellement
sudo crontab -e
# Ajouter cette ligne
#0 0 * * * certbot renew --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.ovhsecrets/ovh.ini --quiet
01 00 * * * root /usr/bin/certbot certonly --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.ovhsecrets/ovh.ini  --non-interactive --agree-tos --email email@mail.fr -d exemple.com -d *.exemple.com

Conclusion

OVH prend en charge les certificats wildcard via son API, ce qui permet d'automatiser la validation DNS avec Let's Encrypt. En utilisant Certbot et le plugin DNS OVH, vous pouvez facilement obtenir et renouveler des certificats wildcard pour vos sous-domaines.

Source: deepseek.


Debian 13 pour Certbot + plugin OVH avec Docker

🔧 Solution A


1️⃣ Créer le Dockerfile

Dans un dossier ~/certbot-docker :

mkdir -p ~/certbot-docker
cd ~/certbot-docker
nano Dockerfile

Contenu du Dockerfile:

# Dockerfile pour Certbot + plugin OVH
FROM certbot/certbot:v2.9.0

# Installer le plugin OVH
RUN pip install certbot-dns-ovh

2️⃣ Créer le docker-compose.yml

Toujours dans ~/certbot-docker :

version: "3.8"
services:
  certbot:
    build: .
    container_name: certbot-ovh
    volumes:
      - "/etc/letsencrypt:/etc/letsencrypt"
      - "/var/lib/letsencrypt:/var/lib/letsencrypt"
      - "/etc/letsencrypt/.ovhsecrets:/secrets"

3️⃣ Script Bash demande initiale `inital.sh`

docker compose run --rm certbot \
  certonly \
  --dns-ovh \
  --dns-ovh-credentials /secrets/ovh.ini \
  --non-interactive \
  --agree-tos \
  -d example.com -d '*.example.com'

docker compose down

4️⃣ Script Bash renew `renew.sh`

#!/bin/bash
# Renew certificat Let's Encrypt via Docker + notification email

LOGFILE="/var/log/certbot-renew-docker.log"
EMAIL="john@gmail.com"
FROM="cron letsencrypt <john@exemple.com>"

# Nettoyage du log
echo "" > "$LOGFILE"


cd /home/debian/certbot-docker/
# Lancer le renouvellement via Docker Compose
docker compose run --rm certbot renew >> "$LOGFILE" 2>&1
RESULT=$?

# Si renouvellement réussi
if [ $RESULT -eq 0 ]; then
    # Recharger Apache sur l’hôte
    systemctl reload apache2

    # Envoyer un mail de succès
    mail -a "From: $FROM" -s "✅ CERTBOT Renew réussi (Docker) pour example.com" "$EMAIL" < "$LOGFILE"
else
    # Envoyer un mail d’erreur
    mail -a "From: $FROM" -s "❌ CERTBOT Renew ÉCHEC (Docker) pour example.com" "$EMAIL" < "$LOGFILE"
fi

exit 0

🔧 Solution B


1️⃣ Créer le Dockerfile

Dans un dossier ~/certbot-docker :

mkdir -p ~/certbot-docker
cd ~/certbot-docker
nano Dockerfile

Contenu du Dockerfile:

# Dockerfile pour Certbot + plugin OVH
FROM certbot/certbot:v2.9.0

# Installer le plugin OVH
RUN pip install certbot-dns-ovh

2️⃣ Créer le docker-compose.yml

Toujours dans ~/certbot-docker :

version: "3.8"

services:
  certbot:
    build: .
    container_name: certbot-ovh
    volumes:
      - "/etc/letsencrypt:/etc/letsencrypt"
      - "/var/lib/letsencrypt:/var/lib/letsencrypt"
      - "/etc/letsencrypt/.ovhsecrets:/secrets"
    entrypoint: >
      certbot certonly
      --dns-ovh
      --dns-ovh-credentials /secrets/ovh.ini
      --non-interactive
      --agree-tos
      -d example.com
      -d '*.example.com'

Remplace example.com par ton domaine réel. Le volume /secrets pointe sur ton fichier OVH existant.


3️⃣ Construire l’image Docker

cd ~/certbot-docker
docker compose build
  • Cela crée une image certbot-ovh avec le plugin OVH inclus.



4️⃣ Lancer la génération du certificat

docker compose up
  • Les certificats seront dans /etc/letsencrypt/live/example.com/
  • Une fois terminé :
docker compose down

5️⃣ Renouvellement automatique

Créer un script renew.sh à côté de docker-compose.yml :

#!/bin/bash
docker compose run --rm certbot renew --deploy-hook "systemctl reload mariadb"
  • Rendre le script exécutable :
chmod +x renew.sh
  • Ajouter un cron quotidien :
sudo crontab -e
0 3 * * * /home/debian/certbot-docker/renew.sh >> /var/log/certbot-renew.log 2>&1

Avantages :

  • Plugin OVH fonctionne immédiatement
  • Debian 13 reste intact → pas de pip system-wide ni Snap
  • Certificats wildcard Let’s Encrypt générés et renouvelables automatiquement
  • Compatible MariaDB, Nginx, Apache

🔧 Solution C (à tester)

1. Script initial.sh – Création initiale du certificat

Ce script va lancer la commande certonly avec les bons paramètres pour générer un certificat wildcard via OVH :

#!/bin/bash
# Création initiale du certificat Let's Encrypt via Docker

DOMAIN="example.com"
EMAIL="john@gmail.com"
LOGFILE="/var/log/certbot-initial-docker.log"
FROM="cron letsencrypt <john@exemple.com>"

# Nettoyage du log
echo "" > "$LOGFILE"

cd /home/debian/certbot-docker/

# Lancer la création du certificat
docker compose run --rm certbot certonly \
  --dns-ovh \
  --dns-ovh-credentials /secrets/ovh.ini \
  --dns-ovh-propagation-seconds 60 \
  --non-interactive \
  --agree-tos \
  -d "$DOMAIN" \
  -d "*.$DOMAIN" \
  --email "$EMAIL" \
  --no-eff-email >> "$LOGFILE" 2>&1

RESULT=$?

if [ $RESULT -eq 0 ]; then
    systemctl reload apache2
    mail -a "From: $FROM" -s "✅ CERTBOT Création réussie (Docker) pour $DOMAIN" "$EMAIL" < "$LOGFILE"
else
    mail -a "From: $FROM" -s "❌ CERTBOT Création ÉCHEC (Docker) pour $DOMAIN" "$EMAIL" < "$LOGFILE"
fi

exit 0

🔁 2. Script renew.sh – Renouvellement automatique

Voici une version adaptée à l’image certbot/dns-ovh:latest :

#!/bin/bash
# Renouvellement du certificat Let's Encrypt via Docker

LOGFILE="/var/log/certbot-renew-docker.log"
EMAIL="john@gmail.com"
FROM="cron letsencrypt <john@exemple.com>"

# Nettoyage du log
echo "" > "$LOGFILE"

cd /home/debian/certbot-docker/

# Lancer le renouvellement
docker compose run --rm certbot renew \
  --dns-ovh-credentials /secrets/ovh.ini \
  --dns-ovh-propagation-seconds 60 >> "$LOGFILE" 2>&1

RESULT=$?

if [ $RESULT -eq 0 ]; then
    systemctl reload apache2
    mail -a "From: $FROM" -s "✅ CERTBOT Renew réussi (Docker)" "$EMAIL" < "$LOGFILE"
else
    mail -a "From: $FROM" -s "❌ CERTBOT Renew ÉCHEC (Docker)" "$EMAIL" < "$LOGFILE"
fi

exit 0

🧾 Résumé des étapes à suivre

📁 1. Préparer les fichiers
  • Crée un dossier certbot-docker avec :
    • docker-compose.yml
    • initial.sh
    • renew.sh
    • Un dossier secrets/ contenant ovh.ini avec les clés API :
dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxx
dns_ovh_application_secret = xxx
dns_ovh_consumer_key = xxx

⚠️ Donne les bons droits : chmod 600 secrets/ovh.ini


🐳 2. Contenu du docker-compose.yml
version: "3.8"

services:
  certbot:
    image: certbot/dns-ovh:latest
    container_name: certbot-ovh
    volumes:
      - "/etc/letsencrypt:/etc/letsencrypt"
      - "/var/lib/letsencrypt:/var/lib/letsencrypt"
      - "./secrets:/secrets"
    entrypoint: ""

🛠️ 3. Lancer la création initiale
chmod +x initial.sh
./initial.sh

🔁 4. Configurer le renouvellement automatique

Ajoute dans crontab -e :

0 3 * * * /home/debian/certbot-docker/renew.sh