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://learn.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 验证它是否可信

不幸的是,这不起作用:

$ 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 上测试)

  1. 手动生成自签名证书
  2. 信任这个证书
  3. 强制您的应用程序使用此证书

详细说明:

  1. 手动生成自签名证书:

    • 使用以下内容创建 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
  1. 信任这个证书:

    • 将localhost.crt复制到/usr/local/share/ca-certificates
    • 使用 sudo update-ca-certificates 信任证书
    • 验证证书是否被复制到/etc/ssl/certs/localhost.pem (扩展更改)
    • 现在可以在没有 CAfile 选项的情况下验证证书
$ openssl verify localhost.crt 
localhost.crt: OK
  1. 强制您的应用程序使用此证书

    • 使用以下设置更新您的 appsettings.json:
"Kestrel": {
  "Certificates": {
    "Default": {
      "Path": "localhost.pfx",
      "Password": ""
    }
  }
}

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

相关文章:

javascript - 如何使用 JScript 设置按钮的文本?

C# 将 HttpResponseMessage 反序列化为对象

c# - 从不同项目的 appsettings.json 中读取多个连接字符串

asp.net-core - 如何让自托管 signalR 服务器作为 NetCore 控制台应用程序运行

asp.net - 以编程方式获取 IIS 服务器 URL

asp.net - 在调用 "WebSecurity.InitializeDatabaseConnection"类的任何其他方法之前,必须先调用 "WebSecurity"方法

objective-c - 在 Linux (Ubuntu) 上编译 Objective-C 项目

OpenCV - highgui.hpp 中的错误

android - 从命令行删除持久僵尸进程

c# - 为 Epplus Excel 文件创建最小起订量