Utiliser SSL pour les applications ASP.NET Core conteneurisées
SSL (Secure Sockets Layer) fournit des connexions sécurisées via HTTP (HTTPS). Cette méthode de sécurisation des connexions utilise un certificat et, dans une application conteneurisée, les mappages de ports sont différents pour les points d’entrée sécurisés et non sécurisés.
Les architectures des applications multiconteneurs varient selon les exigences de sécurité. Certaines conceptions d’applications utilisent HTTPS pour les points de terminaison externes, et HTTP pour la communication interne d’un conteneur à un autre. Les environnements hautement sécurisés peuvent utiliser HTTPS pour toutes les communications, même entre les conteneurs qui sont uniquement accessibles dans un périmètre externe sécurisé.
Ports et mappages de ports
Le Dockerfile contient des directives pour exposer des ports au trafic externe en HTTP non sécurisé ou HTTPS sécurisé. Par ailleurs, .NET 8 et les versions ultérieures exécutent l’application conteneurisée en tant qu’utilisateur type mais, dans les versions antérieures de .NET, les applications conteneurisées s’exécutent en tant qu’administrateur. Lors de l’exécution en tant qu’administrateur, les applications ont accès aux ports privilégiés 80 pour le trafic HTTP et au trafic HTTPS 443. Lorsque les applications s’exécutent en tant qu’utilisateurs sans privilèges élevés, elles utilisent les ports 8080 pour HTTP et 8081 pour HTTPS. Les ports apparaissent dans les commandes EXPOSE dans le Dockerfile généré par Visual Studio. Les ports du conteneur spécifiés dans le Dockerfile sont mappés aux ports hôtes à l’aide des mappages spécifiés dans le fichier des paramètres de lancement. Paramètres de lancement des outils de conteneur. Lorsque le conteneur est en cours d’exécution, vous pouvez afficher les mappages de ports dans la fenêtre Conteneurs. Consultez la page Afficher et diagnostiquer des conteneurs
Certificats
Les outils de conteneur dans Visual Studio prennent en charge le débogage d’une application ASP.NET Core compatible SSL avec un certificat de développement, de la même façon que vous vous attendiez à ce qu’elle fonctionne sans conteneurs. Pour ce faire, Visual Studio ajoute quelques étapes supplémentaires pour exporter le certificat et le rendre disponible dans le conteneur. Voici le flux que Visual Studio gère pour vous lors du débogage dans le conteneur :
Vérifie que le certificat de développement local est présent et approuvé sur l’ordinateur hôte via l’outil
dev-certs
.Exporte le certificat vers
%APPDATA%\ASP.NET\Https
avec un mot de passe sécurisé stocké dans le magasin de secrets utilisateur pour cette application particulière.Le volume monte les répertoires suivants :
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core recherche un certificat qui correspond au nom de l’assembly sous le dossier Https. C’est pourquoi il est mappé au conteneur dans ce chemin d’accès. Le chemin d’accès et le mot de passe du certificat peuvent également être définis à l’aide de variables d’environnement (à savoir ASPNETCORE_Kestrel__Certificates__Default__Path
et ASPNETCORE_Kestrel__Certificates__Default__Password
) ou dans le fichier JSON de secrets utilisateur, par exemple :
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
Si votre configuration prend en charge les builds conteneurisées et non conteneurisées, vous devez utiliser les variables d’environnement, car les chemins d’accès sont spécifiques à l’environnement de conteneur.
Pour plus d’informations sur l’utilisation de SSL avec des applications ASP.NET Core dans des conteneurs, consultez Hébergement d’images ASP.NET Core avec Docker sur HTTPS.
Pour obtenir un exemple de code illustrant la création de certificats personnalisés pour une application multiservice qui sont approuvés sur l’hôte et dans les conteneurs pour la communication de service à service HTTPS, consultez CertExample.