Uso de SSL para aplicaciones ASP.NET Core contenedorizadas
SSL (capa de sockets seguros) proporciona conexiones seguras a través de HTTP (HTTPS). Este método de protección de conexiones usa un certificado y, en una aplicación contenedorizada, las asignaciones de puertos son diferentes para los puntos de entrada protegidos y no seguros.
Las arquitecturas de aplicaciones de varios contenedores varían en función de los requisitos de seguridad. Algunos diseños de aplicaciones usan HTTPS para puntos de conexión externos, pero HTTP para la comunicación interna de un contenedor a otro. Los entornos de alta seguridad pueden usar HTTPS para todas las comunicaciones, incluso entre contenedores a los que solo se puede acceder dentro de un perímetro externo seguro.
Puertos y asignaciones de puertos
Dockerfile contiene directivas para exponer puertos al tráfico externo a través de HTTP no seguro o HTTPS seguro. Además, .NET 8 y versiones posteriores ejecutan la aplicación contenedorizada como usuario típico, pero en versiones anteriores de .NET, las aplicaciones contenedorizadas se ejecutan como administrador. Cuando se ejecuta como administrador, las aplicaciones tienen acceso a los puertos con privilegios 80 para el tráfico HTTP y el tráfico HTTPS 443. Cuando las aplicaciones se ejecutan como usuarios sin privilegios elevados, usan los puertos 8080 para HTTP y 8081 para HTTPS. Los puertos aparecen en los comandos EXPOSE del Dockerfile que genera Visual Studio. Los puertos del contenedor especificado en el Dockerfile se asignan a los puertos host mediante las asignaciones especificadas en el archivo de configuración de inicio. Consulte Configuración de inicio de las herramientas de contenedor. Cuando se ejecuta el contenedor, puede ver las asignaciones de puertos en la ventana Contenedores. Consulte Visualización y diagnóstico de contenedores.
Certificados
Las herramientas de contenedor de Visual Studio admiten la depuración de una aplicación ASP.NET Core habilitada para SSL con un certificado de desarrollo, de la misma manera que cabría esperar que funcionase sin contenedores. Para que esto suceda, Visual Studio agrega un par de pasos más para exportar el certificado y ponerlo a disposición del contenedor. Este es el flujo que Visual Studio controla automáticamente durante la depuración en el contenedor:
Garantiza que el certificado de desarrollo local esté presente y sea de confianza en el equipo host mediante la herramienta
dev-certs
.Exporta el certificado a
%APPDATA%\ASP.NET\Https
con una contraseña segura que esté almacenada en el almacén de secretos de usuario de esta aplicación en concreto.Monta el volumen en los directorios siguientes:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core busca un certificado que coincida con el nombre de ensamblado de la carpeta Https, que es el motivo por el que se asigna al contenedor en esa ruta de acceso. La ruta de acceso del certificado y la contraseña pueden definirse alternativamente mediante variables de entorno (es decir, ASPNETCORE_Kestrel__Certificates__Default__Path
y ASPNETCORE_Kestrel__Certificates__Default__Password
) o en el archivo json de secretos de usuario, por ejemplo:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
Si la configuración admite tanto compilaciones ubicadas en contenedores como compilaciones que no lo están, debe usar las variables del entorno, ya que las rutas de acceso son específicas del entorno de contenedor.
Para obtener más información sobre el uso de SSL con aplicaciones ASP.NET Core en contenedores, vea Hospedaje de imágenes de ASP.NET Core con Docker a través de HTTPS.
Para ver un ejemplo de código que muestra cómo crear certificados personalizados para una aplicación de varios servicios que son de confianza en el host y en los contenedores para la comunicación entre servicios HTTPS, consulte CertExample.