【问题标题】:Where does .net core search for certificates on linux platform.net core在linux平台哪里搜索证书
【发布时间】:2019-01-15 15:39:19
【问题描述】:

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

【问题讨论】:

  • blogs.msdn.microsoft.com/webdev/2018/02/27/… "在 Linux 上,没有跨发行版信任证书的标准方法,因此您需要执行发行版特定指南来信任开发证书。"这应该会给你一些开始的提示。
  • @LexLi:谢谢,在发布问题之前我确实浏览过它。但问题是我们如何指定证书的位置
  • 询问 Google 什么是“发行版特定指南”,位置会很明显。

标签: c# ssl .net-core .net-standard .net-standard-2.0


【解决方案1】:

.Net Core 在 Linux 上使用OpenSSL,因此,您需要在容器中设置您的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/
    
  2. 调用update-ca-certificates:

     RUN update-ca-certificates
    

【讨论】:

    【解决方案2】:

    对于 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
    

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

    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 添加到您的受信任证书列表中 浏览器。

    具体如何实现这取决于您的浏览器/发行版。

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

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

    【讨论】:

      【解决方案3】:

      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 证书的一个好主意),在具有 .NET 的 Linux 上,您可以使用 new X509Store(StoreName.My, StoreLocation.CurrentUser) 写入和读取用户本地证书存储。

      猜你喜欢
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2020-03-11
      • 2017-10-12
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多