.net core在linux平台哪里搜索证书

Where does .net core search for certificates on linux platform

在 Windows 上,对于 .NET Framework 类 我们可以将 sslkeyrepository 指定为 *SYSTEM/*USER.On linux .NET Core 在哪里类 默认搜索 certificates 以及 sslkeyrepository 的值。

.Net Core 在 Linux 上使用 OpenSSL,因此,您需要在容器中设置 Linux environment,以便 OpenSSL 会选择上证书。

您可以通过两种方式做到这一点:

  1. 正在将证书 .crt 文件复制到 update-ca-certificates 将扫描受信任证书的位置 - 例如/usr/local/share/ca-certificates/ 或 RHEL /etc/pki/ca-trust/source/anchors/:

     COPY myca.crt /usr/local/share/ca-certificates/
    
  2. 正在调用update-ca-certificates:

     RUN update-ca-certificates
    

对于Linux和Mac .NET CORE将使用OpenSSL

生成私钥和证书签名请求的命令:

openssl req -config https.config -new -out csr.pem

创建自签名证书的命令:

openssl x509 -req -days 365 -extfile https.config -extensions v3_req -in csr.pem -signkey key.pem -out https.crt

用于生成包含可与 Kestrel 一起使用的证书和私钥的 pfx 文件的命令:

openssl pkcs12 -export -out https.pfx -inkey key.pem -in https.crt -password pass:<password>

之后Trust the certificate

此步骤是可选的,但如果没有它,浏览器会警告您您的网站可能不安全。如果你的浏览器没有 trust your certificate:

,你会看到类似下面的内容

Linux 上没有集中信任证书的方式,因此您可以执行以下操作之一:

  1. 排除您在浏览器中使用的 URL 排除列表

  2. 信任本地主机上的所有自签名证书

  3. 将 https.crt 添加到您的受信任证书列表中 浏览器.

具体如何实现取决于您的 browser/distro。

你也可以参考完整的 Kestrel HTTPS sample app

或关注此博客 Configuring HTTPS in ASP.NET Core across different platforms

This page provides a good (and official) summary of the X509Store locations on Linux (and all platforms) for .NET Core

简短的回答是,在 Linux 上,LocalMachine/Root 存储可以只读模式打开,并且从该存储返回的证书来自标准 Linux 系统全局证书目录。 @barr-j 的回答提供了一些关于如何使用 Linux 命令将证书复制到系统目录的信息。然而,这些系统全局证书的正常用途是指定受信任的证书颁发机构,而不是作为存储 https 证书(包含私钥,主机上的所有用户都不应访问)的安全位置。

在使用 .NET 的 Linux 上,您不能直接写入 LocalMachine/Root X509Store,并且 LocalMachine/My 不受支持。

如果您希望您的证书访问仅限于特定用户(对于 https 证书来说是个好主意),在 Linux 上使用 .NET 您可以使用 [= 写入和读取用户本地证书存储14=].