asp.net - 如何运行 'dotnet dev-certs https --trust' ?

标签 asp.net ubuntu asp.net-core https

我是 ASP.NET 的新手。

环境:

  • Ubuntu 18.04
  • Visual Studio 代码
  • .NET SDK 2.2.105

  • 我在运行某些命令时遇到了麻烦。

    我正在阅读教程

    https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-2.2&tabs=visual-studio-code

    并运行此命令:

    dotnet dev-certs https --trust
    

    我期待 https://localhost应该被信任。
    但我发现了错误信息;
    $ Specify --help for a list of available options and commands.
    

    似乎命令“dotnet dev-certs https”没有 --trust 选项。
    如何解决这个问题?

    最佳答案

    在 Ubuntu 上,标准机制是:

  • dotnet dev-certs https -v生成自签名证书
  • 使用 openssl pkcs12 -in <certname>.pfx -nokeys -out localhost.crt -nodes 将 ~/.dotnet/corefx/cryptography/x509stores/my 中生成的证书从 pfx 转换为 pem
  • 复制 localhost.crt/usr/local/share/ca-certificates
  • 使用 sudo update-ca-certificates 信任证书
  • 验证证书是否复制到 /etc/ssl/certs/localhost.pem (扩展更改)
  • 使用 openssl verify localhost.crt 验证它是否受信任

  • 不幸的是,这不起作用:
  • dotnet dev-certs https生成受 https://github.com/openssl/openssl/issues/1418 中描述的问题影响的证书和 https://github.com/dotnet/aspnetcore/issues/7246 :
  • $ openssl verify localhost.crt
    CN = localhost
    error 20 at 0 depth lookup: unable to get local issuer certificate
    error localhost.crt: verification failed
    
  • 因此,dotnet 客户端不可能信任证书

  • 解决方法: (在 Openssl 1.1.1c 上测试)
  • 手动生成自签名证书
  • 信任此证书
  • 强制您的应用程序使用此证书

  • 详细:
  • 手动生成自签名证书:
  • 创建具有以下内容的 localhost.conf 文件:
  • [req]
    default_bits       = 2048
    default_keyfile    = localhost.key
    distinguished_name = req_distinguished_name
    req_extensions     = req_ext
    x509_extensions    = v3_ca
    
    [req_distinguished_name]
    commonName                  = Common Name (e.g. server FQDN or YOUR name)
    commonName_default          = localhost
    commonName_max              = 64
    
    [req_ext]
    subjectAltName = @alt_names
    
    [v3_ca]
    subjectAltName = @alt_names
    basicConstraints = critical, CA:false
    keyUsage = keyCertSign, cRLSign, digitalSignature,keyEncipherment
    
    [alt_names]
    DNS.1   = localhost
    DNS.2   = 127.0.0.1
    
  • 使用 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf 生成证书
  • 使用 openssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.crt 将证书转换为 pfx
  • (可选)使用 openssl verify -CAfile localhost.crt localhost.crt 验证证书这应该产生 localhost.crt: OK
  • 因为它尚未使用 openssl verify localhost.crt 被信任应该失败
  • CN = localhost
    error 18 at 0 depth lookup: self signed certificate
    error localhost.crt: verification failed
    
  • 相信这个证书:
  • 将 localhost.crt 复制到 /usr/local/share/ca-certificates
  • 使用 sudo update-ca-certificates 信任证书
  • 验证证书是否复制到 /etc/ssl/certs/localhost.pem (扩展更改)
  • 现在应该可以在没有 CAfile 选项的情况下验证证书
  • $ openssl verify localhost.crt 
    localhost.crt: OK
    
  • 强制您的应用程序使用此证书
  • 使用以下设置更新您的 appsettings.json:
  • "Kestrel": {
      "Certificates": {
        "Default": {
          "Path": "localhost.pfx",
          "Password": ""
        }
      }
    }
    

    关于asp.net - 如何运行 'dotnet dev-certs https --trust' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60815781/

    相关文章:

    网络核心 : There is already an object named 'AspNetRoles' in the database

    asp.net - IIS7.5 上的 ASP4.5 出现异常 Collection is read-only 错误

    c# - 如何选择特定图像并从特定网址保存? (内有说明)

    python - 使用 Fabric 检查路径是否存在

    mysql - 磁盘空间不足 : will my live application mysql database be corrupted?

    asp.net-core - 具有独立数据库的 ASP.NET Core

    razor - 使用 Asp.Net Core 时,如何查看为 Razor 页面生成的代码?

    javascript - 随机出现的多个 Canvas 图像

    asp.net - 有没有一种好方法来存储数据库中的枚举?

    java - 由于内存不足,Ubuntu 内核终止了 CPLEX ILP 进程