Tutoriels

Déployer une app HTTPS pour ASP.NET CORE avec Let’s Encrypt et Docker

ParQuentin Destrade

image d’illustration de l’article

Contenu détaillé de l’article:Déployer une app HTTPS pour ASP.NET CORE avec Let’s Encrypt et Docker

Ce guide couvre la sécurisation d'une application ASP.NET Core avec un certificat SSL généré par Let's Encrypt : installation de Certbot, génération du certificat, configuration de Kestrel pour HTTPS et déploiement dans un conteneur Docker.

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

Démarrez dès maintenant

Récupérez votre licence d’essai gratuite en ligne
et connectez vos applications .NET à votre IBM i en quelques minutes.

Créez votre compte

Connectez-vous au portail Aumerial, générez votre licence d’essai et activez NTi sur votre IBM i en quelques instants.

Démarrer l’essai

Ajouter NTi à votre projet

Installez NTi Data Provider depuis NuGet dans Visual Studio et référencez-le dans votre projet .NET.

Voir la documentation

Besoin d’aide ?

Si vous avez des questions sur nos outils ou sur les options de licence, notre équipe est disponible pour vous aider.

Nous contacter
30 jours d’essai gratuit activation immédiate sans engagement aucun composant à installer côté IBM i