Hospedaje ASP.NET Core imágenes 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, la identidad y el cifrado.
En este documento se explica cómo ejecutar imágenes de contenedor preinquiladas con HTTPS mediante la interfaz de la línea de comandos (CLI) de .NET. Para obtener instrucciones sobre cómo ejecutar Docker en el desarrollo con Visual Studio, consulte Developing ASP.NET Core Applications with Docker over HTTPS(Desarrollo de aplicaciones 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.
Requisitos previos
El SDK de .NET Core 2.2 o posterior es necesario para algunas de las instrucciones de este documento.
Certificados
Se requiere un certificado de una entidad de certificación para el hospedaje de producción de un dominio. Let's Encrypt es una entidad de certificación que ofrece certificados gratuitos.
En este documento se usan certificados de desarrollo autofirmados para hospedar imágenes preprobadas a través de localhost . Las instrucciones son similares al uso de certificados de producción. El certificado generado por se usa solo con y dotnet dev-certs localhost no debe usarse en un entorno como Kubernetes. Para admitir HTTPS dentro de un clúster de Kubernetes, use las herramientas proporcionadas por Administrar certificados TLS en un clúster para configurar TLS en pods.
Use dotnet dev-certs para crear certificados autofirmados para desarrollo y pruebas.
Para certificados de producción:
- La
dotnet dev-certsherramienta no es necesaria. - No es necesario almacenar los certificados en la ubicación que se usa en las instrucciones. Cualquier ubicación debe funcionar, aunque no se recomienda almacenar certificados en el directorio del sitio.
Las instrucciones contenidas en la sección siguiente incluyen certificados de montaje de volúmenes en contenedores mediante la opción de línea -v de comandos de Docker. Puede agregar certificados a imágenes de contenedor con un COPY comando en un dockerfile, pero no se recomienda. No se recomienda copiar certificados en una imagen por los siguientes motivos:
- Resulta difícil usar la misma imagen para realizar pruebas con certificados de desarrollador.
- Resulta difícil usar la misma imagen para el hospedaje con certificados de producción.
- Existe un riesgo significativo de divulgación de certificados.
Ejecución de imágenes de contenedor pre-creadas con HTTPS
Siga estas instrucciones para la configuración del sistema operativo.
Windows contenedores de Linux
Generar certificado y configurar la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
En los comandos anteriores, reemplace { password here } 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/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ mcr.microsoft.com/dotnet/core/samples:aspnetapp
Al usar PowerShell,reemplace %USERPROFILE% por $env:USERPROFILE .
La contraseña debe coincidir con la contraseña usada para el certificado.
Nota: En este caso, el certificado debe ser un .pfx archivo. El uso de un archivo o con o sin la contraseña .crt no se admite con el contenedor de .key ejemplo. Por ejemplo, al especificar un archivo, el contenedor puede devolver mensajes de error como "El modo de servidor SSL debe usar un certificado con la .crt 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
Generar certificado y configurar la máquina local:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
dotnet dev-certs https --trustsolo se admite en macOS y Windows. Debe confiar en los certificados en Linux de la manera que admite la distribución. Es probable que necesite confiar en el certificado en el explorador.
En los comandos anteriores, reemplace { password here } por una contraseña.
Ejecute la imagen de contenedor con ASP.NET Core configurado para HTTPS:
docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ mcr.microsoft.com/dotnet/core/samples:aspnetapp
La contraseña debe coincidir con la contraseña usada para el certificado.
Windows con contenedores de Windows
Generar certificado y configurar la máquina local:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
En los comandos anteriores, reemplace { password here } 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/core/samples:aspnetapp
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" -e ASPNETCORE_Kestrel__Certificates__Default__Path=\https\aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:C:\https\ mcr.microsoft.com/dotnet/core/samples:aspnetapp
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 Developing ASP.NET Core Applications with Docker over HTTPS (Desarrollo de aplicaciones de ASP.NET Core con Docker a través de HTTPS) para obtener información y ejemplos sobre cómo desarrollar ASP.NET Core aplicaciones con HTTPS en contenedores de Docker.