Hébergement d’images Docker 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 le client Docker17.06 ou une version ultérieure.

Prérequis

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écompilées 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 la commande COPY 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 significatif de divulgation du certificat.

Exécution d’images de conteneurs préconstruites avec HTTPS

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

Conteneurs Linux sur 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 <CREDENTIAL_PLACEHOLDER> par 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=443 -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 <CREDENTIAL_PLACEHOLDER> par le mot de passe. Le mot de passe doit correspondre au mot de passe utilisé pour le certificat.

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

Le certificat dans ce cas doit être un fichier .pfx. L’utilisation d’un fichier .crt 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.

Note

Ne confondez pas la clé de configuration ASPNETCORE_HTTPS_PORTS et la variable d’environnement HTTPS_PORTS, qui définissent les ports de la configuration du point de terminaison Kestrel/HTTP.sys, avec la clé de configuration ASPNETCORE_HTTPS_PORT et la variable d’environnement HTTPS_PORT, qui définissent le port du middleware de redirection vers HTTPS.

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

Sur Linux, dotnet dev-certs https --trust nécessite le KIT SDK .NET 9 ou version ultérieure. Pour Linux sur .NET 8.0.401 ou version antérieure, consultez la documentation de votre distribution Linux pour approuver un certificat.

Dans les commandes précédentes, remplacez <CREDENTIAL_PLACEHOLDER> par 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=443 -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 <CREDENTIAL_PLACEHOLDER> par le mot de passe. Le mot de passe doit correspondre au mot de passe utilisé pour le certificat.

Note

Ne confondez pas la clé de configuration ASPNETCORE_HTTPS_PORTS et la variable d’environnement HTTPS_PORTS, qui définissent les ports de la configuration du point de terminaison Kestrel/HTTP.sys, avec la clé de configuration ASPNETCORE_HTTPS_PORT et la variable d’environnement HTTPS_PORT, qui définissent le port du middleware de redirection vers HTTPS.

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 <CREDENTIAL_PLACEHOLDER> par un mot de passe. Lorsque vous utilisez PowerShell, remplacez %USERPROFILE% par $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=443 -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

REMARQUE :<CREDENTIAL_PLACEHOLDER> est un paramètre fictif pour le mot de passe par défaut des certificats Kestrel.

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

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

Consultez Développer des applications ASP.NET Core avec Docker via 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

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 la version 17.06 ou ultérieure du client Docker.

Prérequis

Le 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éconstruites 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 Manage TLS Certificates in a 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 la commande COPY 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 de 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 <CREDENTIAL_PLACEHOLDER> par 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://+:443;http://+" -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 <CREDENTIAL_PLACEHOLDER> par le mot de passe. Le mot de passe doit correspondre au mot de passe utilisé pour le certificat.

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

Remarque : Dans ce cas, le certificat doit être un fichier .pfx. L’utilisation d’un fichier .crt 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 SSL du serveur 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 faire confiance aux certificats sur Linux de la manière prise en charge par votre distribution. Il est probable que vous deviez faire confiance au certificat dans votre navigateur.

Dans les commandes précédentes, remplacez <CREDENTIAL_PLACEHOLDER> par 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://+:443;http://+" -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 <CREDENTIAL_PLACEHOLDER> par 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 <CREDENTIAL_PLACEHOLDER> par un mot de passe. Lorsque vous utilisez PowerShell, remplacez %USERPROFILE% par $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://+:443;http://+" -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

REMARQUE :<CREDENTIAL_PLACEHOLDER> représente le mot de passe par défaut des certificats Kestrel.

Le mot de passe doit correspondre au mot de passe utilisé pour le certificat. Lorsque vous utilisez PowerShell, remplacez %USERPROFILE% par $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