Hébergement d’images ASP.NET Core avec Docker sur HTTPS

Par Rick Anderson

ASP.NET Core utilise HTTPS par défaut. HTTPS s’appuie sur des certificats pour l’approbation, l’identité et le chiffrement.

Ce document explique comment exécuter des images conteneur prédéfinies avec HTTPS à l’aide de l’interface de ligne de commande (CLI) .NET. Pour obtenir des instructions sur l’exécution de Docker en développement avec Visual Studio, consultez Développement d’applications ASP.NET Core avec Docker sur HTTPS.

Cet échantillon exige Docker 17.06 ou version ultérieure du client Docker.

Prérequis

Kit de développement logiciel (SDK) .NET actuel.

Certificats

Un certificat d’une autorité de certification est requis pour l’hébergement en production d’un domaine. Let's Encrypt est une autorité de certification qui propose des certificats gratuits.

Ce document utilise des certificats de développement auto-signés pour héberger des images prédéfinies sur localhost. Les instructions sont similaires à l’utilisation de certificats de production. Le certificat généré par dotnet dev-certs est destiné à être utilisé uniquement avec localhost et ne doit pas être utilisé dans un environnement comme Kubernetes. Pour prendre en charge HTTPS au sein d’un cluster Kubernetes, utilisez les outils fournis par Gérer les certificats TLS dans un cluster pour configurer TLS dans des pods.

Utilisez dotnet dev-certs pour créer des certificats auto-signés à des fins de développement et de test.

Pour des certificats de production :

  • L’outil dotnet dev-certs n’est pas obligatoire.
  • Les certificats n’ont pas besoin d’être stockés à l’emplacement utilisé dans les instructions. N’importe quel emplacement doit fonctionner, bien que le stockage des certificats dans votre répertoire de site ne soit pas recommandé.

Les instructions contenues dans la section suivante montent en volume des certificats dans des conteneurs à l’aide de l’option de ligne de commande de -v Docker. Vous pouvez ajouter des certificats dans des images conteneur avec une COPY commande dans un fichier Dockerfile, mais ce n’est pas recommandé. La copie de certificats dans une image n’est pas recommandée pour les raisons suivantes :

  • Il est difficile d’utiliser la même image pour les tests avec des certificats de développeur.
  • Il est difficile d’utiliser la même image pour l’hébergement avec des certificats de production.
  • Il existe un risque important de divulgation de certificat.

Exécution d’images conteneur prédéfinies avec HTTPS

Suivez les instructions suivantes pour la configuration de votre système d’exploitation.

Windows utilisant des conteneurs Linux

Générez un certificat et configurez l’ordinateur local :

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

Dans les commandes précédentes, remplacez par <CREDENTIAL_PLACEHOLDER> un mot de passe.

Exécutez l’image conteneur avec ASP.NET Core configuré pour HTTPS dans un interpréteur de commandes :

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

Dans le code précédent, remplacez par <CREDENTIAL_PLACEHOLDER> le mot de passe. Le mot de passe doit correspondre au mot de passe utilisé pour le certificat.

Lorsque vous utilisez PowerShell, remplacez par %USERPROFILE%$env:USERPROFILE.

Remarque : Dans ce cas, le certificat doit être un .pfx fichier. L’utilisation d’un .crt fichier ou .key avec ou sans le mot de passe n’est pas prise en charge avec l’exemple de conteneur. Par exemple, lors de la spécification d’un .crt fichier, le conteneur peut retourner des messages d’erreur tels que « Le mode serveur SSL doit utiliser un certificat avec la clé privée associée ». Lorsque vous utilisez WSL, validez le chemin de montage pour vous assurer que le certificat se charge correctement.

macOS ou Linux

Générez un certificat et configurez l’ordinateur local :

dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

dotnet dev-certs https --trust est uniquement pris en charge sur macOS et Windows. Vous devez approuver les certificats sur Linux de la manière prise en charge par votre distribution. Il est probable que vous deviez approuver le certificat dans votre navigateur.

Dans les commandes précédentes, remplacez par <CREDENTIAL_PLACEHOLDER> un mot de passe.

Exécutez l’image conteneur avec ASP.NET Core configuré pour HTTPS :

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp

Dans le code précédent, remplacez par <CREDENTIAL_PLACEHOLDER> le mot de passe. Le mot de passe doit correspondre au mot de passe utilisé pour le certificat.

Windows utilisant des conteneurs Windows

Générez un certificat et configurez l’ordinateur local :

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust

Dans les commandes précédentes, remplacez par <CREDENTIAL_PLACEHOLDER> un mot de passe. Lorsque vous utilisez PowerShell, remplacez par %USERPROFILE%$env:USERPROFILE.

Exécutez l’image conteneur avec ASP.NET Core configuré pour HTTPS :

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="<CREDENTIAL_PLACEHOLDER>" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ --user ContainerAdministrator mcr.microsoft.com/dotnet/samples:aspnetapp

NOTE:<CREDENTIAL_PLACEHOLDER> est un espace réservé pour le mot de passe par défaut des Kestrel certificats.

Le mot de passe doit correspondre au mot de passe utilisé pour le certificat. Lorsque vous utilisez PowerShell, remplacez par %USERPROFILE%$env:USERPROFILE.

Développer des applications ASP.NET Core avec Docker sur le protocole HTTPS

Consultez Développement d’applications ASP.NET Core avec Docker sur HTTPS pour obtenir des informations et des exemples sur le développement d’applications ASP.NET Core avec HTTPS dans des conteneurs Docker.

Voir aussi