« Ovh letsencrypt » : différence entre les versions
Aucun résumé des modifications |
|||
| (18 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 ? == | |||
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 == | |||
=== É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 16 : | Ligne 16 : | ||
: Permissions : Accordez les permissions suivantes : | : Permissions : Accordez les permissions suivantes : | ||
< | <syntaxhighlight lang="yaml" line> | ||
GET /domain/zone/* | GET /domain/zone/ | ||
GET /domain/zone/exemple.com/ | |||
POST /domain/zone/ | GET /domain/zone/exemple.com/status | ||
GET /domain/zone/exemple.com/record | |||
DELETE /domain/zone/* | GET /domain/zone/exemple.com/record/* | ||
</ | POST /domain/zone/exemple.com/record | ||
POST /domain/zone/exemple.com/refresh | |||
DELETE /domain/zone/exemple.com/record/* | |||
</syntaxhighlight> | |||
Notez les identifiants suivants : | Notez les identifiants suivants : | ||
| Ligne 32 : | Ligne 35 : | ||
: Consumer Key (CK) | : Consumer Key (CK) | ||
=== É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 55 : | Ligne 58 : | ||
Remplacez les valeurs par vos clés API OVH. | Remplacez les valeurs par vos clés API OVH. | ||
Protégez le fichier : | Protégez le fichier : | ||
<syntaxhighlight lang="bash" line> | <syntaxhighlight lang="bash" line> | ||
sudo chmod 600 /etc/letsencrypt/.secrets/ovh.ini | sudo chmod 600 /etc/letsencrypt/.secrets/ovh.ini | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Étape 3 : Obtenir un certificat wildcard | |||
==== Gestion des token des applications ==== | |||
: Dans la console de l'api | |||
https://eu.api.ovh.com/console/?section=%2Fdomain&branch=v1#auth | |||
<syntaxhighlight lang="yaml" line> | |||
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} | |||
</syntaxhighlight> | |||
=== É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 66 : | 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 === | |||
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 77 : | Ligne 89 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 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 84 : | 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 == | |||
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 93 : | Ligne 105 : | ||
# Créer le fichier de configuration OVH | # Créer le fichier de configuration OVH | ||
sudo mkdir -p /etc/letsencrypt/. | sudo mkdir -p /etc/letsencrypt/.ovhsecrets | ||
sudo nano /etc/letsencrypt/. | sudo nano /etc/letsencrypt/.ovhsecrets/ovh.ini | ||
# Ajouter les informations suivantes dans ovh.ini | # Ajouter les informations suivantes dans ovh.ini | ||
| Ligne 103 : | Ligne 115 : | ||
# Protéger le fichier | # Protéger le fichier | ||
sudo chmod 600 /etc/letsencrypt/. | sudo chmod 600 /etc/letsencrypt/.ovhsecrets/ovh.ini | ||
# Obtenir un certificat wildcard | # Obtenir un certificat wildcard | ||
sudo certbot certonly --dns-ovh --dns-ovh-credentials /etc/letsencrypt/. | sudo certbot certonly --dns-ovh --dns-ovh-credentials /etc/letsencrypt/.ovhsecrets/ovh.ini -d exemple.com -d *.exemple.com | ||
# Automatiser le renouvellement | # Automatiser le renouvellement | ||
sudo crontab -e | sudo crontab -e | ||
# Ajouter cette ligne | # Ajouter cette ligne | ||
0 0 * * * certbot renew --dns-ovh --dns-ovh-credentials /etc/letsencrypt/. | #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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== 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. | ||
Source: deepseek. | |||
== Debian 13 pour Certbot + plugin OVH avec Docker == | |||
=== 🔧 Solution A === | |||
----- | |||
`certbot/certbot:v2.9.0` | |||
==== 1️⃣ Créer le Dockerfile ==== | |||
Dans un dossier <code>~/certbot-docker</code> : | |||
<syntaxhighlight lang="bash">mkdir -p ~/certbot-docker | |||
cd ~/certbot-docker | |||
nano Dockerfile</syntaxhighlight> | |||
Contenu du Dockerfile: | |||
<syntaxhighlight lang="dockerfile"># Dockerfile pour Certbot + plugin OVH | |||
FROM certbot/certbot:v2.9.0 | |||
# Installer le plugin OVH | |||
RUN pip install certbot-dns-ovh</syntaxhighlight> | |||
----- | |||
==== 2️⃣ Créer le docker-compose.yml ==== | |||
Toujours dans <code>~/certbot-docker</code> : | |||
<syntaxhighlight lang="yaml">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" | |||
</syntaxhighlight> | |||
----- | |||
==== 3️⃣ Script Bash demande initiale `inital.sh` ==== | |||
<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️⃣ Script Bash renew `renew.sh` ==== | |||
<syntaxhighlight lang="bash"> | |||
#!/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 | |||
</syntaxhighlight> | |||
✅ '''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 B (à tester) === | |||
`certbot/dns-ovh:latest` | |||
==== ✅ '''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> | |||
----- | |||
==== 🔁 '''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 ==== | |||
[[category:ovh]] | |||
===== 📁 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">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: ""</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> | |||
----- | |||
[[category:ovh]] [[category:Docker]] [[category:Debian]] | |||