« Ovh letsencrypt » : différence entre les versions

 
(13 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
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.
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 ? ===
== 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.<br />
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.<br />
Automatisation : Avec l'API, vous pouvez intégrer le processus de renouvellement des certificats dans vos scripts ou outils d'automatisation (comme Certbot).<br />
Automatisation : Avec l'API, vous pouvez intégrer le processus de renouvellement des certificats dans vos scripts ou outils d'automatisation (comme Certbot).<br />
Gestion centralisée : Si vous utilisez OVH comme fournisseur DNS, l'API vous permet de gérer vos enregistrements DNS programmatiquement.<br />
Gestion centralisée : Si vous utilisez OVH comme fournisseur DNS, l'API vous permet de gérer vos enregistrements DNS programmatiquement.<br />


=== 2. Comment utiliser l'API OVH avec Certbot pour les certificats wildcard ===
== 2. Comment utiliser l'API OVH avec Certbot pour les certificats wildcard ==
==== Étape 1 : Créer une application API OVH ====
=== Étape 1 : Créer une application API OVH ===
: Allez sur la page des API OVH : https://api.ovh.com/.
: Allez sur la page des API OVH : https://api.ovh.com/.
: Connectez-vous à votre compte OVH.
: Connectez-vous à votre compte OVH.
Ligne 35 : Ligne 35 :
: Consumer Key (CK)
: Consumer Key (CK)


==== Étape 2 : Configurer Certbot avec le plugin DNS OVH ====
=== Étape 2 : Configurer Certbot avec le plugin DNS OVH ===
Installez Certbot et le plugin DNS OVH :<br />
Installez Certbot et le plugin DNS OVH :<br />
Sur Debian/Ubuntu :
Sur Debian/Ubuntu :
Ligne 62 : Ligne 62 :
</syntaxhighlight>
</syntaxhighlight>


===== Gestion des token des applications =====
==== Gestion des token des applications ====
: Dans la console de l'api
: Dans la console de l'api
https://eu.api.ovh.com/console/?section=%2Fdomain&branch=v1#auth
https://eu.api.ovh.com/console/?section=%2Fdomain&branch=v1#auth
Ligne 71 : Ligne 71 :
</syntaxhighlight>
</syntaxhighlight>


==== Étape 3 : Obtenir un certificat wildcard ====
=== Étape 3 : Obtenir un certificat wildcard ===
Utilisez Certbot avec le plugin DNS OVH pour obtenir un certificat wildcard :
Utilisez Certbot avec le plugin DNS OVH pour obtenir un certificat wildcard :
<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
Ligne 78 : Ligne 78 :
Certbot utilisera l'API OVH pour créer automatiquement l'enregistrement DNS TXT requis pour la validation.
Certbot utilisera l'API OVH pour créer automatiquement l'enregistrement DNS TXT requis pour la validation.


==== Étape 4 : Automatiser le renouvellement ====
=== Étape 4 : Automatiser le renouvellement ===
Let's Encrypt émet des certificats valides pendant 90 jours. Vous devez 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 :
Ajoutez une tâche cron pour renouveler automatiquement les certificats :
Ligne 89 : Ligne 89 :
</syntaxhighlight>
</syntaxhighlight>


=== 3. Limitations et considérations ===
== 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.
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.


Ligne 96 : Ligne 96 :
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).
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 ===
== 4. Exemple complet ==
Voici un exemple complet pour obtenir un certificat wildcard avec OVH et Certbot :
Voici un exemple complet pour obtenir un certificat wildcard avec OVH et Certbot :


Ligne 128 : Ligne 128 :
</syntaxhighlight>
</syntaxhighlight>


=== Conclusion ===
== 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.
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.


Ligne 134 : Ligne 134 :




=== Debian 13 pour Certbot + plugin OVH avec Docker ===
== Debian 13 pour Certbot + plugin OVH avec Docker ==
=== 🔧 Solution A (BEST)===
`certbot/dns-ovh:latest`
 
*[https://github.com/marmits/certbot-docker-ovh PROJET GITHUB => DOCKER CERTBOT OVH]*
 
==== ✅ '''1. Script <code>initial.sh</code> – Création initiale du certificat''' ====
 
Ce script va lancer la commande <code>certonly</code> avec les bons paramètres pour générer un certificat wildcard via OVH :
 
<syntaxhighlight lang="bash">#!/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</syntaxhighlight>


==== Solution A ====
-----
-----


===== 1️⃣ Créer le Dockerfile =====
==== 🔁 '''2. Script <code>renew.sh</code> – Renouvellement automatique''' ====
 
Voici une version adaptée à l’image <code>certbot/dns-ovh:latest</code> :
 
<syntaxhighlight lang="bash">#!/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</syntaxhighlight>
 
-----
 
==== 🧾 Résumé des étapes à suivre ====
 
===== 📁 1. '''Préparer les fichiers''' =====
 
* Crée un dossier <code>certbot-docker</code> avec :
** <code>docker-compose.yml</code>
** <code>initial.sh</code>
** <code>renew.sh</code>
** Un dossier <code>secrets/</code> contenant <code>ovh.ini</code> avec les clés API :
 
<syntaxhighlight lang="ini">dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = xxx
dns_ovh_application_secret = xxx
dns_ovh_consumer_key = xxx</syntaxhighlight>
<blockquote>⚠️ Donne les bons droits : <code>chmod 600 secrets/ovh.ini</code>
</blockquote>
 
-----
 
===== 🐳 2. '''Contenu du <code>docker-compose.yml</code>''' =====
 
<syntaxhighlight lang="yaml">
services:
  certbot:
    image: certbot/dns-ovh
    container_name: certbot-ovh
    volumes:
      - "/etc/letsencrypt:/etc/letsencrypt"
      - "/var/lib/letsencrypt:/var/lib/letsencrypt"
      - "/etc/letsencrypt/.ovhsecrets:/secrets"
    restart: "no"
</syntaxhighlight>
 
-----
 
===== 🛠️ 3. '''Lancer la création initiale''' =====
 
<syntaxhighlight lang="bash">chmod +x initial.sh
./initial.sh</syntaxhighlight>
 
-----
 
===== 🔁 4. '''Configurer le renouvellement automatique'''=====
 
Ajoute dans <code>crontab -e</code> :
 
<syntaxhighlight lang="bash">0 3 * * * /home/debian/certbot-docker/renew.sh</syntaxhighlight>
 
-----
 
 
 
 
=== 🔧 Solution B (Old) ===
-----
`certbot/certbot:v2.9.0`
==== 1️⃣ Créer le Dockerfile ====


Dans un dossier <code>~/certbot-docker</code> :
Dans un dossier <code>~/certbot-docker</code> :
Ligne 156 : Ligne 289 :
-----
-----


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


Toujours dans <code>~/certbot-docker</code> :
Toujours dans <code>~/certbot-docker</code> :


<syntaxhighlight lang="yaml">version: "3.8"
<syntaxhighlight lang="yaml">version: "3.8"
services:
services:
   certbot:
   certbot:
Ligne 170 : Ligne 302 :
       - "/var/lib/letsencrypt:/var/lib/letsencrypt"
       - "/var/lib/letsencrypt:/var/lib/letsencrypt"
       - "/etc/letsencrypt/.ovhsecrets:/secrets"
       - "/etc/letsencrypt/.ovhsecrets:/secrets"
    entrypoint: >
</syntaxhighlight>
      certbot certonly
      --dns-ovh
      --dns-ovh-credentials /secrets/ovh.ini
      --non-interactive
      --agree-tos
      -d example.com
      -d '*.example.com'</syntaxhighlight>
<blockquote>Remplace <code>example.com</code> par ton domaine réel. Le volume <code>/secrets</code> pointe sur ton fichier OVH existant.
</blockquote>


-----
-----


===== 3️⃣ Construire l’image Docker =====
==== 3️⃣ Script Bash demande initiale `inital.sh` ====
 
<syntaxhighlight lang="bash">cd ~/certbot-docker
docker compose build</syntaxhighlight>
* Cela crée une image <code>certbot-ovh</code> avec le plugin OVH inclus.
 


<syntaxhighlight lang="bash">
docker compose run --rm certbot \
  certonly \
  --dns-ovh \
  --dns-ovh-credentials /secrets/ovh.ini \
  --non-interactive \
  --agree-tos \
  -d example.com -d '*.example.com'
</syntaxhighlight>
-----
-----
<syntaxhighlight lang="bash">docker compose down</syntaxhighlight>


===== 4️⃣ Lancer la génération du certificat =====
==== 4️⃣ Script Bash renew `renew.sh` ====


<syntaxhighlight lang="bash">docker compose up</syntaxhighlight>
<syntaxhighlight lang="bash">
* Les certificats seront dans <code>/etc/letsencrypt/live/example.com/</code>
#!/bin/bash
* Une fois terminé :
# Renew certificat Let's Encrypt via Docker + notification email


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


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


===== 5️⃣ Renouvellement automatique =====


Créer un script <code>renew.sh</code> à côté de <code>docker-compose.yml</code> :
cd /home/debian/certbot-docker/
# Lancer le renouvellement via Docker Compose
docker compose run --rm certbot renew >> "$LOGFILE" 2>&1
RESULT=$?


<syntaxhighlight lang="bash">#!/bin/bash
# Si renouvellement réussi
docker compose run --rm certbot renew --deploy-hook "systemctl reload mariadb"</syntaxhighlight>
if [ $RESULT -eq 0 ]; then
* Rendre le script exécutable :
    # Recharger Apache sur l’hôte
    systemctl reload apache2


<syntaxhighlight lang="bash">chmod +x renew.sh</syntaxhighlight>
    # Envoyer un mail de succès
* Ajouter un cron quotidien :
    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


<syntaxhighlight lang="bash">sudo crontab -e</syntaxhighlight>
exit 0
<pre class="cron">0 3 * * * /home/debian/certbot-docker/renew.sh &gt;&gt; /var/log/certbot-renew.log 2&gt;&amp;1</pre>


-----
</syntaxhighlight>


✅ '''Avantages :'''
✅ '''Avantages :'''
Ligne 224 : Ligne 361 :
* Certificats wildcard Let’s Encrypt générés et renouvelables automatiquement
* Certificats wildcard Let’s Encrypt générés et renouvelables automatiquement
* Compatible MariaDB, Nginx, Apache
* Compatible MariaDB, Nginx, Apache


-----
-----
 
[[category:ovh]] [[category:Docker]] [[category:Debian]]
 
 
[[category:ovh]]