通过 HTTPS 在 Docker 上宿主 ASP.NET Core 映像Hosting ASP.NET Core images with Docker over HTTPS
本文内容
默认情况下,ASP.NET Core 使用 HTTPS。HTTPS依赖于信任、标识和加密的证书。
本文档介绍如何通过 HTTPS 运行预生成的容器映像。
若要开发方案,请参阅通过 HTTPS 上的 Docker 开发 ASP.NET Core 应用程序。
此示例需要 docker 17.06或更高版本的docker 客户端。
先决条件Prerequisites
本文档中的某些说明需要.Net Core 2.2 SDK或更高版本。
证书Certificates
针对域的生产主机需要证书颁发机构颁发的证书。Let's Encrypt是提供免费证书的证书颁发机构。
本文档使用自签名开发证书来托管 localhost
上的预建映像。说明类似于使用生产证书。
对于生产证书:
dotnet dev-certs
工具不是必需的。- 证书不需要存储在说明中使用的位置。尽管不建议在网站目录中存储证书,但任何位置都应有效。
以下部分中包含的说明使用 Docker 的 -v
命令行选项将证书装载到容器中。可以使用Dockerfile中的 COPY
命令将证书添加到容器映像中,但不建议这样做。由于以下原因,不建议将证书复制到映像:
- 使用同一个映像测试开发人员证书非常困难。
- 使用同一个映像通过生产证书进行托管很困难。
- 证书泄露存在重大风险。
用 HTTPS 运行预生成的容器映像Running pre-built container images with HTTPS
使用以下有关操作系统配置的说明。
使用 Linux 容器的 WindowsWindows using Linux containers
生成证书并配置本地计算机:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
在上述命令中,将 { password here }
替换为密码。
运行容器映像,并为 HTTPS 配置 ASP.NET Core:
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
密码必须与用于证书的密码匹配。
macOS 或 LinuxmacOS or Linux
生成证书并配置本地计算机:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
只有 macOS 和 Windows 支持 dotnet dev-certs https —trust
。你需要以发行版支持的方式信任 Linux 上的证书。可能需要在浏览器中信任该证书。
在上述命令中,将 { password here }
替换为密码。
运行容器映像,并为 HTTPS 配置 ASP.NET Core:
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
密码必须与用于证书的密码匹配。
使用 Windows 容器的 windowsWindows using Windows containers
生成证书并配置本地计算机:
dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
dotnet dev-certs https --trust
在上述命令中,将 { password here }
替换为密码。
运行容器映像,并为 HTTPS 配置 ASP.NET Core:
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
密码必须与用于证书的密码匹配。