DevOps : Comment créer un domaine wildcard et générer un certificat SSL avec Certbot

Introduction

Un domaine wildcard est un type de domaine qui permet d’inclure tous les sous-domaines d’un domaine principal. Par exemple, avec le domaine exemple.com, un domaine wildcard *.exemple.com couvre blog.exemple.com, shop.exemple.com, et d’autres sous-domaines. Ce mécanisme simplifie la gestion des sous-domaines, évitant d’avoir à créer des enregistrements DNS pour chaque sous-domaine individuellement.

Un certificat SSL wildcard sécurise non seulement le domaine principal mais aussi tous ses sous-domaines avec un seul certificat. Cela simplifie la gestion des certificats SSL et réduit les coûts. Cet article explique comment créer un domaine wildcard et générer un certificat SSL pour ce domaine en utilisant Certbot. Nous aborderons les méthodes pour les domaines achetés sur GoDaddy et OVH, ainsi que la mise à jour manuelle des certificats.

Use case

Imaginons que vous développez une application web permettant à chaque utilisateur inscrit d’avoir son propre espace personnalisé. Pour cela, chaque utilisateur se voit attribuer un sous-domaine unique, tel que masociete.exemple.com, votresociete.exemple.com, et ainsi de suite.

Nous allons examiner comment créer un domaine wildcard et générer un certificat SSL en utilisant Certbot, en couvrant trois cas de fournisseurs de domaine populaires : GoDaddy, OVH, et Cloudflare.

Création d’un domaine wildcard

Sur GoDaddy

Connectez-vous à votre compte GoDaddy Accédez à votre tableau de bord GoDaddy en vous connectant à votre compte.

Accédez à la gestion des DNS

  • Cliquez sur “Mes produits”.
  • Trouvez le domaine pour lequel vous souhaitez ajouter un enregistrement wildcard.
  • Cliquez sur “Gérer DNS” à côté du domaine sélectionné.

Ajouter un enregistrement wildcard

  • Dans la section “Enregistrements”, cliquez sur “Ajouter”.
  • Sélectionnez le type d’enregistrement comme “A” (ou “CNAME” si vous préférez).
  • Dans le champ “Nom”, entrez * pour créer un enregistrement wildcard.
  • Dans le champ “Valeur”, entrez l’adresse IP ou le CNAME approprié pour le sous-domaine wildcard.
  • Cliquez sur “Enregistrer” pour ajouter l’enregistrement.

Vérifier l’enregistrement Assurez-vous que l’enregistrement wildcard est correctement ajouté et propagé. Cela peut prendre quelques minutes.

Sur OVH

Connectez-vous à votre compte OVH Accédez à votre tableau de bord OVH en vous connectant à votre compte.

Accédez Web Cloud

  • Puis dans “Noms de domaine”.
  • Sélectionnez le domaine pour lequel vous souhaitez ajouter un enregistrement wildcard.
  • Cliquez sur “Zone DNS” pour accéder à la gestion des enregistrements DNS. Mon lien ressemble à ceci : https://www.ovh.com/manager/#/web/domain/exemple.com/zone

Ajouter un enregistrement wildcard

  • Cliquez sur “Ajouter une entrée”.
  • Choisissez le type d’enregistrement comme “A” (ou “CNAME” si vous préférez).
  • Dans le champ “Sous-domaine”, entrez * pour créer un enregistrement wildcard.
  • Dans le champ “Cible”, entrez l’adresse IP ou le CNAME approprié pour le sous-domaine wildcard.
  • Cliquez sur “Suivant” puis sur “Valider” pour ajouter l’enregistrement.

Vérifier l’enregistrement Assurez-vous que l’enregistrement wildcard est correctement ajouté et propagé. Cela peut prendre quelques minutes.

Sur Cloudflare

Connectez-vous à votre compte Cloudflare Accédez à votre tableau de bord Cloudflare en vous connectant à votre compte.

Accédez au menu Websites

  • Sélectionnez le domaine pour lequel vous souhaitez ajouter un enregistrement wildcard.
  • Allez dans l’onglet “DNS” pour accéder à la gestion des enregistrements DNS.

Ajouter un enregistrement wildcard

  • Cliquez sur “Ajouter un enregistrement”.
  • Sélectionnez le type d’enregistrement comme “A” (ou “CNAME” si vous préférez).
  • Dans le champ “Nom”, entrez * pour créer un enregistrement wildcard.
  • Dans le champ “Valeur”, entrez l’adresse IP ou le CNAME approprié pour le sous-domaine wildcard.
  • Cliquez sur “Enregistrer” pour ajouter l’enregistrement.

Vérifier l’enregistrement Assurez-vous que l’enregistrement wildcard est correctement ajouté et propagé. Cela peut prendre quelques minutes.

Génération automatique du certificat SSL avec Certbot

Pourquoi utiliser un plugin DNS ?

Certbot est un outil qui automatise le processus d’obtention de certificats SSL/TLS. Pour obtenir un certificat SSL wildcard, Certbot utilise le challenge DNS pour prouver la propriété du domaine. Ce challenge nécessite l’ajout d’un enregistrement TXT spécifique dans la zone DNS du domaine.

Les plugins DNS de Certbot, comme ceux pour GoDaddy et OVH, facilitent ce processus en automatisant la gestion des enregistrements DNS. Voici pourquoi ces plugins sont nécessaires :

  • Automatisation : Les plugins DNS automatisent l’ajout et la suppression des enregistrements DNS nécessaires pour la validation du domaine. Cela réduit le besoin d’intervention manuelle, accélère le processus et minimise les erreurs humaines.
  • Gestion des autorisations : Les plugins DNS utilisent les API des fournisseurs pour ajouter les enregistrements nécessaires. Cela nécessite des clés API pour permettre à Certbot d’interagir avec votre compte DNS de manière sécurisée.
  • Simplicité : En utilisant un plugin DNS, vous évitez les étapes manuelles complexes de gestion des enregistrements DNS, ce qui simplifie la configuration et le renouvellement des certificats.

Pour un domaine acheté sur GoDaddy

1. Obtenir les accès API chez GoDaddy

Pour utiliser Certbot avec le plugin DNS GoDaddy, vous devez obtenir vos identifiants API (clé API et secret API) depuis votre compte GoDaddy.

  1. Connectez-vous à votre compte GoDaddy.
  2. Accédez à API Keys.
  3. Cliquez sur “Add API Key”.
  4. Nommez votre clé, choisissez “Production” et cliquez sur “Create Key”.
  5. Notez la clé API et le secret API fournis.

2. Installer Certbot et le plugin DNS pour GoDaddy

sudo apt-get update
sudo apt-get install certbot python3-certbot-dns-godaddy

3. Créer un fichier de configuration pour les identifiants API

Créez un fichier godaddy.ini pour stocker vos identifiants API de manière sécurisée :

sudo nano /etc/letsencrypt/godaddy.ini

Ajoutez les lignes suivantes :

dns_godaddy_secret = VOTRE_SECRET_API
dns_godaddy_key = VOTRE_CLE_API

Assurez-vous que seuls les utilisateurs autorisés peuvent lire ce fichier :

sudo chmod 600 /etc/letsencrypt/godaddy.ini

4. Générer le certificat wildcard

Utilisez la commande suivante pour générer le certificat :

sudo certbot certonly \
    --authenticator certbot-dns-godaddy:dns-godaddy \
    --certbot-dns-godaddy:dns-godaddy-credentials /etc/letsencrypt/godaddy.ini \
    --certbot-dns-godaddy:dns-godaddy-propagation-seconds 900 \
    --keep-until-expiring \
    --non-interactive \
    --expand \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -d '*.exemple.com' \
    --dry-run

Note: La commande ci-dessus utilise l’option --dry-run pour simuler le processus sans effectuer de modifications réelles. Pour un test en production, retirez l’option --dry-run afin de procéder à la génération du certificat. Si vous souhaitez que le certificat couvre également le domaine principal exemple.com, ajoutez simplement -d exemple.com à la commande.

Pour un domaine acheté sur OVH

1. Obtenir les accès API chez OVH

Pour utiliser Certbot avec le plugin DNS OVH, vous devez obtenir vos identifiants API (Application Key, Application Secret, Consumer Key) depuis votre compte OVH.

  1. Connectez-vous à votre compte OVH.
  2. Accédez à API OVH.
  3. Créez une nouvelle clé API avec les permissions nécessaires pour gérer les enregistrements DNS comme ci-dessous.

2. Installer Certbot et le plugin DNS pour OVH

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

3. Créer un fichier de configuration pour les identifiants API

Créez un fichier ovh.ini pour stocker vos identifiants API de manière sécurisée :

sudo nano /etc/letsencrypt/ovh.ini

Ajoutez les lignes 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

Assurez-vous que seuls les utilisateurs autorisés peuvent lire ce fichier :

sudo chmod 600 /etc/letsencrypt/ovh.ini

4. Générer le certificat wildcard

Utilisez la commande suivante pour générer le certificat :

sudo certbot certonly \
    --authenticator certbot-dns-ovh:dns-ovh \
    --certbot-dns-ovh:dns-ovh-credentials /etc/letsencrypt/ovh.ini \
    --certbot-dns-ovh:dns-ovh-propagation-seconds 900 \
    --keep-until-expiring \
    --non-interactive \
    --expand \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -d '*.exemple.com' \
    --dry-run

Note: La commande ci-dessus utilise l’option --dry-run pour simuler le processus sans effectuer de modifications réelles. Pour un test en production, retirez l’option --dry-run afin de procéder à la génération du certificat. Si vous souhaitez que le certificat couvre également le domaine principal exemple.com, ajoutez simplement -d exemple.com à la commande.

Pour un domaine sur Cloudflare

1. Obtenir les accès API chez Cloudflare

Pour utiliser Certbot avec le plugin DNS Cloudflare, vous devez obtenir vos identifiants API (Global API Key) depuis votre compte Cloudflare.

  1. Connectez-vous à votre compte Cloudflare.
  2. Accédez à My Profile.
  3. Cliquez sur “Create Token” (Créer un jeton).
  4. Choisissez “Create Custom Token” (Créer un jeton personnalisé).
  5. Nommer le jeton
  6. Nom du jeton : Donnez un nom descriptif, par exemple, “Certbot DNS Validation”.
  7. Configurer les autorisations
  8. Autorisations : Vous devrez sélectionner les autorisations appropriées pour permettre à Certbot d’ajouter et de gérer les enregistrements DNS.

2. Installer Certbot et le plugin DNS pour Cloudflare

sudo apt-get update
sudo apt-get install certbot python3-certbot-dns-cloudflare

3. Créer un fichier de configuration pour les identifiants API

Créez un fichier cloudflare.ini pour stocker vos identifiants API de manière sécurisée :

sudo nano /etc/letsencrypt/cloudflare.ini

Ajoutez les lignes suivantes :

dns_cloudflare_api_token = VOTRE_API_TOKEN

Assurez-vous que seuls les utilisateurs autorisés peuvent lire ce fichier :

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

4. Générer le certificat wildcard

Utilisez la commande suivante pour générer le certificat :

sudo certbot certonly \
    --authenticator certbot-dns-cloudflare:dns-cloudflare \
    --certbot-dns-cloudflare:dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    --certbot-dns-cloudflare:dns-cloudflare-propagation-seconds 900 \
    --keep-until-expiring \
    --non-interactive \
    --expand \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -d '*.exemple.com' \
    --dry-run

Note: La commande ci-dessus utilise l’option --dry-run pour simuler le processus sans effectuer de modifications réelles. Pour un test en production, retirez l’option --dry-run.

Création et mise à jour manuelle

Si vous préférez gérer vos certificats SSL manuellement, voici comment faire :

Générer un certificat wildcard manuellement Utilisez la commande Certbot suivante pour générer un certificat et obtenir les instructions pour vérifier la propriété du domaine via un enregistrement DNS :

certbot certonly --manual --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory -d '*.exemple.com'

Cette commande produit le retour ci dessous :

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.exemple.com with the following value:

U_rIPPpgQ4mMgbabkxA3c-iUX3bpt1h65gkndkfdfhBG

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Ajouter l’enregistrement DNS Certbot vous fournira un enregistrement DNS TXT à ajouter à votre zone DNS. Connectez-vous à votre gestionnaire de DNS et ajoutez cet enregistrement comme spécifié. Par exemple si le domaine est réservé au niveau de Godaddy ça donnerait ceci :

Compléter la vérification Une fois que l’enregistrement DNS est ajouté, revenez à Certbot et poursuivez le processus pour compléter la validation. Le certificat sera généré et stocké dans /etc/letsencrypt/live/exemple.com/.

Configurer Nginx pour utiliser le certificat

Modifiez votre fichier de configuration Nginx :

server {
    listen 80;
    server_name *.exemple.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2; # Activation de HTTP/2
    server_name ~^(.*)\.exemple\.com$;
    root /var/www/exemple;

    index index.html index.htm index.php;

    # En-têtes de sécurité HTTP
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Redémarrez Nginx :

sudo systemctl restart nginx

Conclusion

Créer un domaine wildcard et générer un certificat SSL est essentiel pour sécuriser tous les sous-domaines d’un domaine principal. En utilisant Certbot avec des plugins DNS spécifiques à GoDaddy ou OVH, vous pouvez automatiser ce processus et simplifier la gestion de vos certificats SSL. Ces plugins évitent les manipulations manuelles complexes en intégrant directement les API des fournisseurs de domaine.

Pour les besoins spécifiques ou si vous préférez gérer les certificats manuellement, Certbot offre également des options flexibles. Assurez-vous de suivre les meilleures pratiques en matière de sécurité, notamment en protégeant vos fichiers de configuration contenant les identifiants API.

Architecte logiciel & CTO * Plus de publications

Architecte logiciel, Développeur d'application diplomé d'ETNA, la filière d'alternance d'Epitech, j'ai acquis une expertise solide dans le développement d'applications, travaillant sur des projets complexes et techniquement diversifiés. Mon expérience englobe l'utilisation de divers frameworks et langages, notamment Symfony, Api Platform, Drupal, Zend, React Native, Angular, Vue.js, Shell, Pro*C...

Contributeurs

0 0 votes
Évaluation de l'article
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Ingénierie informatique (SSII)

Applize crée des logiciels métiers pour accompagner les entreprises dans la transition vers le zéro papier.


Avez-vous un projet en tête ? Discutons-en.