使用自签名证书时,可通过不同的方式创建自签名证书,并将它们用于开发和测试场景。 本指南将介绍如何通过 dotnet dev-certs 以及 PowerShell 和 OpenSSL 等其他选项使用自签名证书。
然后,可以使用容器中托管的 ASP.NET Core 应用等示例来验证是否将加载证书。
先决条件
可在示例中使用 .NET Core 3.1 或 .NET 5。
对于 dotnet dev-certs,请确保已安装适当版本的 .NET:
在 Windows 上安装 .NET
在 Linux 上安装 .NET
在 macOS 上安装 .NET
此示例需要 Docker 17.06 或更高版本的 Docker 客户端。
准备示例应用
你需要根据要用于测试的运行时(.NET Core 3.1 或 .NET 5)来准备示例应用。
对于本指南,你将使用示例应用并进行适当的更改。
.NET Core 3.1 示例应用
获取示例应用。
git clone https://github.com/dotnet/dotnet-docker/
在本地导航到存储库,并在编辑器中打开工作区。
备注
如果要使用 dotnet publish 参数对部署进行剪裁,则应确保包含适当的依赖项以便支持 SSL 证书。
更新 dotnet-dockersamplesaspnetappaspnetapp.csproj 以确保容器中包含适当的程序集。 有关参考,请查看如何更新 .csproj 文件以便在对自包含部署应用剪裁时支持 SSL 证书。
确保 aspnetapp.csproj 包含适当的目标框架:
代码语言:javascript复制<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>.netcoreapp3.1</TargetFramework>
<!--Other Properties-->
</PropertyGroup>
</Project>
修改 Dockerfile,确保运行时指向 .NET Core 3.1:
代码语言:javascript复制# https://hub.docker.com/_/microsoft-dotnet-core
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
确保指向示例应用。
代码语言:javascript复制cd .dotnet-dockersamplesaspnetapp
构建用于本地测试的容器。
代码语言:javascript复制docker build -t aspnetapp:my-sample -f Dockerfile .
.NET 5 示例应用
对于本指南,应针对 .NET 5 检查示例 aspnetapp。
检查示例应用 Dockerfile 是否使用 .NET 5。
根据主机 OS,可能需要更新 ASP.NET 运行时。 例如,在 Dockerfile 中从 mcr.microsoft.com/dotnet/aspnet:5.0-nanoservercore-2009 AS runtime 更改为 mcr.microsoft.com/dotnet/aspnet:5.0-windowsservercore-ltsc2019 AS runtime 将有助于面向适当的 Windows 运行时。
例如,这将有助于在 Windows 上测试证书:
代码语言:javascript复制# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore -r win-x64
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app -r win-x64 --self-contained false --no-restore
# final stage/image
# Uses the 2009 release; 2004, 1909, and 1809 are other choices
FROM mcr.microsoft.com/dotnet/aspnet:5.0-windowsservercore-ltsc2019 AS runtime
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["aspnetapp"]
如果要在 Linux 上测试证书,可以使用现有的 Dockerfile。
确保 aspnetapp.csproj 包含适当的目标框架:
代码语言:javascript复制<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<!--Other Properties-->
</PropertyGroup>
</Project>
备注
如果要使用 dotnet publish 参数对部署进行剪裁,请确保包含适当的依赖项以便支持 SSL 证书。
更新 dotnet-dockersamplesaspnetappaspnetapp.csproj 以确保容器中包含适当的程序集。 有关参考,请查看如何更新 .csproj 文件以便在对自包含部署应用剪裁时支持 SSL 证书。
确保指向示例应用。
代码语言:javascript复制cd .dotnet-dockersamplesaspnetapp
构建用于本地测试的容器。
代码语言:javascript复制docker build -t aspnetapp:my-sample -f Dockerfile .
创建自签名证书
可以通过以下方法创建自签名证书:
使用 dotnet dev-certs
使用 PowerShell
使用 OpenSSL
使用 dotnet dev-certs
可以使用 dotnet dev-certs 来处理自签名证书。
代码语言:javascript复制dotnet dev-certs https -ep