SSL(安全套接字层)通过 HTTP(HTTPS)提供安全连接。 保护连接的方法使用证书,在容器化应用中,端口映射因安全入口点和不安全入口点而异。
先决条件
- Docker Desktop 或 Podman Desktop。
- Visual Studio,或者对于 Podman 支持,Visual Studio 2026 安装了 ASP.NET 和 Web 开发、Azure 开发 工作负载和/或 .NET 桌面开发 工作负载。
先决条件
- Docker Desktop。
- 安装了 ASP.NET 和 Web 开发、Azure 开发工作负载和/或 .NET 桌面开发工作负载的 Visual Studio。
多容器应用的安全性
多容器应用体系结构因安全要求而异。 某些应用设计对外部终结点使用 HTTPS,但 HTTP 用于从一个容器到另一个容器的内部通信。 高安全性环境可能会对所有通信使用 HTTPS,即使在只能在安全外部外围访问的容器之间也是如此。
端口和端口映射
Dockerfile 包含用于通过不安全的 HTTP 或安全 HTTPS 向外部流量公开端口的指令。 此外,.NET 8 及更高版本以典型用户身份运行容器化应用,但在早期 .NET 版本中,容器化应用以管理员身份运行。 以管理员身份运行时,应用有权访问 HTTP 流量和 443 HTTPS 流量的特权端口 80。 当应用以没有提升权限的用户身份运行时,它们使用端口 8080 作为 HTTPS,将端口 8081 用于 HTTPS。 端口显示在 Visual Studio 生成的 Dockerfile 的 EXPOSE 命令中。 在 Dockerfile 中指定的容器端口通过启动设置文件中的映射被映射到主机端口。 请参阅 容器工具启动设置。 容器运行时,可以在 容器 窗口中查看端口映射。 请参阅查看和诊断容器。
证书
Visual Studio 中的容器工具支持使用开发证书调试启用了 SSL 的 ASP.NET 核心应用,这与你期望在没有容器的情况下工作的方式相同。 为了实现这一点,Visual Studio 会添加几个步骤来导出证书并将其提供给容器。 下面是在容器中调试时 Visual Studio 为你处理的流:
通过
dev-certs工具,确保主机上存在本地开发证书且该证书受主机信任。使用安全密码将证书导出到
%APPDATA%\ASP.NET\Https,该密码存储在此特定应用的用户机密存储中。卷装载以下目录:
*%APPDATA%\Microsoft\UserSecrets*%APPDATA%\ASP.NET\Https
ASP.NET Core 查找与 Https 文件夹下的程序集名称匹配的证书,这就是为什么它映射到该路径中的容器的原因。 也可以使用环境变量(即 ASPNETCORE_Kestrel__Certificates__Default__Path 和 ASPNETCORE_Kestrel__Certificates__Default__Password)或用户机密 json 文件中定义证书路径和密码,例如:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
如果配置同时支持容器化和非容器化生成,则应使用环境变量,因为路径特定于容器环境。
有关在容器中将 SSL 与 ASP.NET Core 应用程序配合使用的详细信息,请参阅 使用 Docker 通过 HTTPS 托管 ASP.NET Core 映像。
有关演示如何为多服务应用创建自定义证书的代码示例,该证书在主机和容器中都被信任用于 HTTPS 服务间通信,请参阅 CertExample。
如果计划将容器化应用部署到 Azure,请参阅 将容器化应用程序部署到 Azure时配置 HTTPS。