Hospedaje de imágenes ASP.NET Core con Docker a través de HTTPS
Por Rick Anderson
ASP.NET Core usa HTTPS de forma predeterminada. HTTPS se basa en certificados para la confianza, identity y el cifrado.
En este documento se explica cómo ejecutar imágenes de contenedor pregeneradas con HTTPS mediante la interfaz de línea de comandos (CLI) de .NET. Para obtener instrucciones sobre cómo ejecutar Docker en desarrollo con Visual Studio, consulte Desarrollo de aplicaciones de ASP.NET Core con Docker a través de HTTPS.
En este ejemplo se necesita la versión Docker 17.06 o posterior del cliente Docker.
Prerrequisitos
El SDK de .NET actual.
Certificados
Se requiere un certificado de una entidad de certificación para el hospedaje de producción para un dominio. Let's Encrypt es una entidad de certificación que ofrece certificados gratuitos.
Este documento utiliza certificados de desarrollo autofirmados para alojar imágenes preconstruidas en localhost
. Las instrucciones son similares al uso de certificados de producción. El certificado generado por dotnet dev-certs
se usa solo con localhost
y no debe usarse en un entorno como Kubernetes. Para admitir HTTPS en un clúster de Kubernetes, use las herramientas proporcionadas por Administración de certificados TLS en un clúster para configurar TLS dentro de pods.
Use dotnet dev-certs
para crear certificados autofirmados para desarrollo y pruebas.
Para los certificados de producción:
- La herramienta
dotnet dev-certs
no es necesaria. - No es necesario almacenar los certificados en la ubicación usada en las instrucciones. Cualquier ubicación debe funcionar, aunque no se recomienda almacenar certificados en el directorio del sitio.
Las instrucciones contenidas en el siguiente volumen de la sección montan certificados en contenedores mediante la opción de línea de comandos -v
de Docker. Puede agregar certificados a imágenes de contenedor con un comando COPY
en un Dockerfile, pero no se recomienda. No se recomienda copiar certificados en una imagen por los siguientes motivos:
- Es difícil usar la misma imagen para realizar pruebas con certificados de desarrollador.
- Es difícil usar la misma imagen para hospedar con certificados de producción.
- Existe un riesgo significativo de divulgación de certificados.
Ejecución de imágenes de contenedor pregeneradas con HTTPS
Siga las instrucciones a continuación para la configuración del sistema operativo.
Windows usando contenedores de Linux
Genere un certificado y configure la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña.
Ejecute la imagen de contenedor con ASP.NET Core configurado para HTTPS en un shell de comandos:
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
En el código anterior, reemplace <CREDENTIAL_PLACEHOLDER>
por la contraseña. La contraseña debe coincidir con la contraseña usada para el certificado.
Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Nota: El certificado en este caso debe ser un archivo .pfx
. No se admite el uso de un archivo .crt
o .key
con o sin la contraseña con el contenedor de ejemplo. Por ejemplo, al especificar un archivo .crt
, el contenedor puede devolver mensajes de error como 'El modo de servidor SSL debe usar un certificado con la clave privada asociada'. Al usar WSL, valide la ruta de acceso de montaje para asegurarse de que el certificado se carga correctamente.
macOS o Linux
Genere el certificado y configure la máquina local:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
En Linux, dotnet dev-certs https --trust
requiere el SDK de .NET 9 o una versión posterior. Para Linux en el SDK de .NET 8.0.401 y versiones anteriores, consulta la documentación de tu distribución de Linux para confiar en un certificado.
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña.
Ejecute la imagen de contenedor con ASP.NET Core configurado para 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
En el código anterior, reemplace <CREDENTIAL_PLACEHOLDER>
por la contraseña. La contraseña debe coincidir con la contraseña usada para el certificado.
Windows con contenedores de Windows
Genere el certificado y configure la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña. Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Ejecute la imagen de contenedor con ASP.NET Core configurado para 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>
es un marcador de posición para la contraseña predeterminada de certificados Kestrel.
La contraseña debe coincidir con la contraseña usada para el certificado. Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)
Consulte Desarrollo de aplicaciones de ASP.NET Core con Docker a través de HTTPS para obtener información y ejemplos sobre cómo desarrollar aplicaciones ASP.NET Core con HTTPS en contenedores de Docker.
Consulte también
- Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)
dotnet dev-certs
ASP.NET Core usa HTTPS de forma predeterminada. HTTPS se basa en certificados para la confianza, identity y el cifrado.
En este documento se explica cómo ejecutar imágenes de contenedor pregeneradas con HTTPS mediante la interfaz de línea de comandos (CLI) de .NET. Para obtener instrucciones sobre cómo ejecutar Docker en desarrollo con Visual Studio, consulte Desarrollo de aplicaciones de ASP.NET Core con Docker a través de HTTPS.
En este ejemplo se necesita la versión Docker 17.06 o posterior del cliente Docker.
Prerrequisitos
El SDK de .NET actual.
Certificados
Se requiere un certificado de una entidad de certificación para el hospedaje de producción para un dominio. Let's Encrypt es una entidad de certificación que ofrece certificados gratuitos.
Este documento utiliza certificados de desarrollo autofirmados para alojar imágenes preconstruidas en localhost
. Las instrucciones son similares al uso de certificados de producción. El certificado generado por dotnet dev-certs
se usa solo con localhost
y no debe usarse en un entorno como Kubernetes. Para admitir HTTPS en un clúster de Kubernetes, use las herramientas proporcionadas por Administración de certificados TLS en un clúster para configurar TLS dentro de pods.
Use dotnet dev-certs
para crear certificados autofirmados para desarrollo y pruebas.
Para los certificados de producción:
- La herramienta
dotnet dev-certs
no es necesaria. - No es necesario almacenar los certificados en la ubicación usada en las instrucciones. Cualquier ubicación debe funcionar, aunque no se recomienda almacenar certificados en el directorio del sitio.
Las instrucciones contenidas en el siguiente volumen de la sección montan certificados en contenedores mediante la opción de línea de comandos -v
de Docker. Puede agregar certificados a imágenes de contenedor con un comando COPY
en un Dockerfile, pero no se recomienda. No se recomienda copiar certificados en una imagen por los siguientes motivos:
- Es difícil usar la misma imagen para realizar pruebas con certificados de desarrollador.
- Es difícil usar la misma imagen para hospedar con certificados de producción.
- Existe un riesgo significativo de divulgación de certificados.
Ejecución de imágenes de contenedor pregeneradas con HTTPS
Siga las instrucciones a continuación para la configuración del sistema operativo.
Windows usando contenedores de Linux
Genere un certificado y configure la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña.
Ejecute la imagen de contenedor con ASP.NET Core configurado para HTTPS en un shell de comandos:
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
En el código anterior, reemplace <CREDENTIAL_PLACEHOLDER>
por la contraseña. La contraseña debe coincidir con la contraseña usada para el certificado.
Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Nota: El certificado en este caso debe ser un archivo .pfx
. No se admite el uso de un archivo .crt
o .key
con o sin la contraseña con el contenedor de ejemplo. Por ejemplo, al especificar un archivo .crt
, el contenedor puede devolver mensajes de error como 'El modo de servidor SSL debe usar un certificado con la clave privada asociada'. Al usar WSL, valide la ruta de acceso de montaje para asegurarse de que el certificado se carga correctamente.
macOS o Linux
Genere el certificado y configure la máquina local:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
dotnet dev-certs https --trust
solo se admite en macOS y Windows. Debe confiar los certificados en Linux de la manera que admite su distribución. Es probable que tenga que confiar su certificado en el explorador.
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña.
Ejecute la imagen de contenedor con ASP.NET Core configurado para 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
En el código anterior, reemplace <CREDENTIAL_PLACEHOLDER>
por la contraseña. La contraseña debe coincidir con la contraseña usada para el certificado.
Windows con contenedores de Windows
Genere el certificado y configure la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <CREDENTIAL_PLACEHOLDER>
dotnet dev-certs https --trust
En los comandos anteriores, reemplace <CREDENTIAL_PLACEHOLDER>
por una contraseña. Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Ejecute la imagen de contenedor con ASP.NET Core configurado para 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>
es un marcador de posición para la contraseña predeterminada de certificados Kestrel.
La contraseña debe coincidir con la contraseña usada para el certificado. Al usar PowerShell, reemplace %USERPROFILE%
por $env:USERPROFILE
.
Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)
Consulte Desarrollo de aplicaciones de ASP.NET Core con Docker a través de HTTPS para obtener información y ejemplos sobre cómo desarrollar aplicaciones ASP.NET Core con HTTPS en contenedores de Docker.
Consulte también
- Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones ASP.NET Core con Docker a través de HTTPS)
dotnet dev-certs