通过 HTTPS 在 Docker 上宿主 ASP.NET Core 映像Hosting ASP.NET Core images with Docker over HTTPS

本文内容

作者:Rick Anderson

默认情况下,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

生成证书并配置本地计算机:

  1. dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
  2. dotnet dev-certs https --trust

在上述命令中,将 { password here } 替换为密码。

运行容器映像,并为 HTTPS 配置 ASP.NET Core:

  1. docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
  2. 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

生成证书并配置本地计算机:

  1. dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p { password here }
  2. dotnet dev-certs https --trust

只有 macOS 和 Windows 支持 dotnet dev-certs https —trust你需要以发行版支持的方式信任 Linux 上的证书。可能需要在浏览器中信任该证书。

在上述命令中,将 { password here } 替换为密码。

运行容器映像,并为 HTTPS 配置 ASP.NET Core:

  1. docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
  2. 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

生成证书并配置本地计算机:

  1. dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p { password here }
  2. dotnet dev-certs https --trust

在上述命令中,将 { password here } 替换为密码。

运行容器映像,并为 HTTPS 配置 ASP.NET Core:

  1. docker pull mcr.microsoft.com/dotnet/core/samples:aspnetapp
  2. 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

密码必须与用于证书的密码匹配。