.net核心在哪里搜索linux平台上的证书

sub*_*aoc 13 c# ssl .net-core .net-standard .net-standard-2.0

在Windows上,对于.NET Framework类,我们可以指定sslkeyrepository为*SYSTEM/*USER.On 默认情况下linux.NET Core类在哪里搜索,certificates以及可能是什么值sslkeyrepository.

Bar*_*r J 8

.Net CoreOpenSSL在 Linux 上使用,因此,您需要Linux environment在容器中设置您OpenSSL的证书,以便获取证书。

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

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

     COPY myca.crt /usr/local/share/ca-certificates/
    
    Run Code Online (Sandbox Code Playgroud)
  2. 调用update-ca-certificates

     RUN update-ca-certificates
    
    Run Code Online (Sandbox Code Playgroud)


Aru*_*tap 5

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

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

openssl req -config https.config -new -out csr.pem
Run Code Online (Sandbox Code Playgroud)

命令创建自签名证书:

openssl x509 -req -days 365 -extfile https.config -extensions v3_req -in csr.pem -signkey key.pem -out https.crt
Run Code Online (Sandbox Code Playgroud)

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

openssl pkcs12 -export -out https.pfx -inkey key.pem -in https.crt -password pass:<password>
Run Code Online (Sandbox Code Playgroud)

之后 Trust the certificate

此步骤是可选的,但如果没有它,浏览器将警告您网站可能不安全.如果浏览器没有,您将看到以下内容trust your certificate:

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

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

  2. 信任localhost上的所有自签名证书

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

如何实现这一点取决于您的浏览器/发行版.

您还可以参考完整的Kestrel HTTPS示例应用程序

或者关注此博客在不同平台上的ASP.NET Core中配置HTTPS


cri*_*mbo 5

此页面提供了X509Store.NET Core 在 Linux(和所有平台)上的位置的良好(和官方)摘要

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

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

如果您希望您的证书访问仅限于特定用户(https 证书的一个好主意),在带有 .NET 的 Linux 上,您可以使用new X509Store(StoreName.My, StoreLocation.CurrentUser).

  • 更新的链接:https://docs.microsoft.com/en-us/dotnet/standard/security/cross-platform-cryptography (2认同)