通过 .NET CLI 生成自签名证书

2022-01-07 08:41:27 浏览数 (1)

使用自签名证书时,可通过不同的方式创建自签名证书,并将它们用于开发和测试场景。 本指南将介绍如何通过 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  

0 人点赞