Déployer une application HTTPS ASP.NET Core avec un certificat SSL peut sembler trivial à première vue, notamment dans des environnements conteneurisés. Entre le montage des fichiers de certificat dans Docker, la gestion des formats PEM et RSA pour Kestrel, et la configuration des variables d'environnement, chaque étape demande de la rigueur. Ce guide suppose un serveur Linux avec Docker déjà installé et une maîtrise des commandes de base pour créer et gérer des images.
Étape 1 - Installation de Certbot sur Linux
Certbot est un outil en ligne de commande qui facilite la demande de certificats SSL/TLS auprès de Let's Encrypt.
- Mettre à jour le serveur et installer Certbot.
# Pour Ubuntu/Debian
sudo apt update
sudo apt install certbot -yÉtape 2 - Génération du certificat SSL avec Let's Encrypt
Pour obtenir un certificat SSL avec le challenge DNS-01, la propriété du domaine doit être prouvée en créant un enregistrement DNS TXT spécifique.
1. Générer un certificat SSL avec le challenge DNS-01:
sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d votre-domaine.com --key-type rsa
L'option certonly permet d'obtenir uniquement le certificat sans configurer automatiquement un serveur web, ce qui donne un contrôle total sur son utilisation dans des déploiements Docker.
L'option --manual valide le certificat via un défi DNS géré manuellement, et --preferred-challenges dns indique que le challenge DNS-01 est préféré car plus flexible dans de nombreux environnements.
2. Suivre les instructions pour le challenge DNS :
Certbot demande de créer un enregistrement DNS TXT pour valider la propriété du domaine :
Please deploy a DNS TXT record under the name
_acme-challenge.votre-domaine.com with the following value:
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
3. Ajouter l'enregistrement DNS TXT :
Dans la section de gestion DNS du fournisseur de domaine, créer un nouvel enregistrement TXT :
Type : TXT
Nom : _acme-challenge.dev
Valeur : ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
4. Valider le challenge DNS :
Revenir au terminal et appuyer sur Entrée pour continuer. Let's Encrypt vérifie l'enregistrement DNS et, s'il est correctement configuré, émet le certificat SSL.
💡Par défaut, les certificats sont générés dans /etc/letsencrypt/live/.
Étape 3 - Vérification et conversion de la clé privée
Une fois le certificat généré, il est important de vérifier que les fichiers PEM sont correctement formatés pour Kestrel.
Vérifier la clé privée :
sudo openssl rsa -in /etc/letsencrypt/live/votre-domaine.com/privkey.pem -check
Convertir la clé privée si nécessaire :
Par défaut, les clés générées par Let's Encrypt avec Certbot sont au format RSA. Si un autre format a été utilisé, la conversion au format RSA attendu par Kestrel se fait ainsi :
sudo openssl rsa -in /etc/letsencrypt/live/votre-domaine.com/privkey.pem -out /etc/letsencrypt/live/votre-domaine.com/privkey-rsa.pemÉtape 4 - Exécuter le conteneur Docker avec les fichiers PEM
Les fichiers PEM de certificat et de clé privée doivent être montés dans le conteneur pour que Kestrel puisse y accéder :
sudo docker run -it -p 443:81 -p 80:80 \
-e ASPNETCORE_URLS="https://*:81;http://*:80" \
-v /etc/letsencrypt:/cert \
-e ASPNETCORE_Kestrel__Certificates__Default__Path=/cert/live/votre-domaine.com/cert.pem \
-e ASPNETCORE_Kestrel__Certificates__Default__KeyPath=/cert/live/votre-domaine.com/privkey.pem \
mon-repos-docker/mon-image-docker:latest
L'option -v /etc/letsencrypt:/cert monte le dossier contenant les fichiers PEM dans le conteneur. Les variables d'environnement spécifient les chemins des fichiers pour que Kestrel les utilise au démarrage.
Étape 5 - Tester l'application
Accéder à https://votre-domaine.com dans un navigateur. Un certificat SSL correctement installé se traduit par une connexion sécurisée avec l'icône de cadenas dans la barre d'adresse.
L'application ASP.NET Core est désormais déployée avec HTTPS dans Docker, avec un certificat Let's Encrypt valide, une configuration portable et reproductible sur n'importe quel environnement Linux.
Quentin Destrade