Introduction
Déployer une application HTTPS ASP.NET Core avec un certificat SSL peut sembler trivial à première vue, surtout avec des services comme Let’s Encrypt qui rendent les certificats gratuits et accessibles. Pourtant, en pratique, cela peut rapidement devenir compliqué, notamment lorsqu’on combine ce processus avec le déploiement d’applications modernes dans des environnements conteneurisés.
La mise en place de certificat SSL nécessite une série de manipulations: il faut savoir comment monter correctement les fichiers de certificat dans un conteneur DOCKER pour qu’ils soient accessibles par l’application, gérer les formats de fichier comme PEM ou RSA pour s’assurer de leur compatibilité avec Kestrel (serveur web intégré d’ASP .NET Core) et configurer les variables d’environnement de manière adéquate pour que l’application puisse les utiliser correctement. Chacune de ces étapes, si elle n’est pas réalisée avec soin, peut introduire des erreurs ou des complications.
Dans cet article, nous nous concentrerons uniquement sur le processus de configuration HTTPS d’une application ASP.NET Core avec un certificat SSL auto-généré par Let’s Encrypt. Nous verrons comment installer Certbot, générer le certificat SSL, configurer Kestrel pour HTTPS, et déployer l’application dans un conteneur Docker. Pour suivre ce guide, vous aurez besoin d’un serveur Linux avec Docker déjà installé et configuré, et vous devez maîtriser les commandes de bases pour créer et gérer des images. En suivant ces étapes, vous pourrez facilement configurer vos applications avec le protocole HTTPS.
Étape 1- Installation de Certbot sur un serveur Linux.
La première étape pour obtenir un certificat SSL gratuit de Let’s Encrypt consiste à installer Certbot sur votre serveur Linux. CertBot est un outil en ligne de commande qui facilite la demande de certificats SSL/TLS.
- 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 (CertBot).
Pour obtenir un certificat SSL avec Let’s Encrypt en utilisant le challenge DNS-01, vous devez prouver la propriété de votre domaine en créant un enregistrement DNS TXT spécifique . Voici comment procéder:
- 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
Cette commande utilise certonly
pour obtenir seulement le certificat sans configurer automatiquement un serveur web, ce qui nous donne un contrôle total sur son utilisation, notamment pour des déploiements personnalisés comme Docker.
L’option --Manual
est choisie pour valider le certificat via un défi DNS géré manuellement, utile quand le fournisseur DNS ne supporte pas l’automatisation, et --Manual-auth-hook
spécifie le script qui aide à automatiser la création de l’enregistrement DNS nécessaire.
Enfin, en utilisant --preferred-challenges dns
, on indique que le challenge DNS-01 est préféré, car plus flexible dans de nombreux environnements.
Une fois cette commande exécutée, Certbot vous demandera de créer un enregistrement DNS spécifique pour valider la propriété du domaine. Suivez les instructions fournies.
- Suivre les instructions de Certbot pour le challenge DNS:
Après avoir exécuté la commande Certbot, Certbot vous demandera de créer un enregistrement DNS TXT pour valider la propriété de votre domaine. Vous devriez avoir une sortie similaire à ceci:
Please deploy a DNS TXT record under the name
_acme-challenge.votre-domaine.com with the following value:
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
- Ajouter l’enregistrement DNS TXT.
Allez dans la section de gestion des DNS de votre fournisseur de domaine, puis créez un nouvel enregistrement TXT avec les détails fournis par Certbot.
Type : TXT
Nom : _acme-challenge.dev
Valeur : ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
- Valider le challenge DNS avec Certbot.
Revenez à votre terminal où vous avez lancé Certbot et appuyez sur Entrée pour continuer. Let’s Encrypt vérifiera l’enregistrement DNS, et s’il est correctement configuré, émettra le certificat SSL.
💡Par défaut, les certificats se trouvent ici: /etc/letssencrypt/live/.
Étape 3- Vérification et conversion de la clé privée.
Une fois le certificat et la clé privée générées, il est important de vérifier que les fichiers au format PEM soient correctement formatés et prêts à être utilisés avec Kestrel.
- Vérifier la clé privée générée par Certbot:
sudo openssl rsa -in /etc/letsencrypt/live/votre-domaine.com/privkey.pem -check
- Convertir la clé privée dans un autre format si nécessaire:
Par défaut, les clés générées par Let's Encrypt avec Certbot sont au format RSA, nous l'avons précisé à l'étape 1. Cependant, si vous avez spécifié un autre format ou utilisé un autre outil pour générer la clé, vous pouvez la convertir au format RSA, attendu par Kestrel, avec la commande suivante :
sudo openssl rsa -in /etc/letsencrypt/live/votre-domaine.com/privkey.pem -out /etc/letsencrypt/live/votre-domaine.com/privkey-rsa.pem
Cette conversion garantit que la clé est au format attendu par Kestrel dans l’application ASP.NET CORE.
Étape 4- Exécuter le conteneur Docker avec les fichiers PEM.
Lors du déploiement de votre application dans un conteneur Docker, vous devez monter les fichiers PEM de certificat et de clé privée afin que Kestrel puisse y accéder.
Utilisez la commande suivante pour exécuter le conteneur Docker sur votre serveur:
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 \
-e mon-repos-docker/mon-image-docker:latest
Cette commande monte le dossier contenant les fichiers PEM (clé privé et certificat) dans le conteneur Docker ( -v /etc/letsencrypt:/cert), permettant à l’application d’y accéder.
Les variables d’environnement spécifient les chemins des fichiers PEM dans le conteneur pour que Kestrel les utilise lors du démarrage, garantissant ainsi la sécurisation des connexions HTTPS.
Étape 5- Exécuter le conteneur Docker avec les fichiers PEM.
Après avoir suivi toutes les étapes, il est temps de tester votre application pour vous assurer que tout fonctionne correctement. Accédez à l’adresse https://votre-domaine.com dans votre navigateur web. Si le certificat SSL a été correctement installé et configuré, vous devriez voir une connexion sécurisée avec l’icône de cadenas affichée dans la barre d'adresse. Cela indique que le trafic entre votre serveur et le client est maintenant chiffré et sécurisé.
Si tout est configuré correctement, votre application ASP.NET est désormais déployée avec succès dans un environnement sécurisé utilisant Docker et un certificat SSL de Let’s Encrypt.
Avec cette approche, vous pouvez facilement sécuriser le déploiement en production de vos applications .NET tout en profitant de la flexibilité et de l’efficacité de Docker, qui permet un déploiement portable sur n’importe quel environnement.
Quentin Destrade