Kob*_*ob4 54 asp.net ubuntu https asp.net-core
我是 ASP.NET 的新手。
环境:
Ubuntu 18.04
视觉工作室代码
.NET SDK 2.2.105
我在运行某些命令时遇到了麻烦。
我正在阅读教程
并运行此命令:
dotnet dev-certs https --trust
Run Code Online (Sandbox Code Playgroud)
我希望https://localhost应该被信任。但我发现了错误信息;
$ Specify --help for a list of available options and commands.
Run Code Online (Sandbox Code Playgroud)
似乎命令“dotnet dev-certs https”没有 --trust 选项。如何解决这个问题?
chr*_*vdb 84
在 Ubuntu 上,标准机制是:
dotnet dev-certs https -v 生成自签名证书openssl pkcs12 -in <certname>.pfx -nokeys -out localhost.crt -nodeslocalhost.crt到/usr/local/share/ca-certificatessudo 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
Run Code Online (Sandbox Code Playgroud)
解决方法:(在 Openssl 1.1.1c 上测试)
详细:
手动生成自签名证书:
[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
Run Code Online (Sandbox Code Playgroud)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.confopenssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.crtopenssl verify -CAfile localhost.crt localhost.crt哪个应该产生localhost.crt: OKopenssl verify localhost.crt应该失败CN = localhost
error 18 at 0 depth lookup: self signed certificate
error localhost.crt: verification failed
Run Code Online (Sandbox Code Playgroud)
相信这个证书:
/usr/local/share/ca-certificatessudo update-ca-certificates/etc/ssl/certs/localhost.pem(扩展更改)$ openssl verify localhost.crt
localhost.crt: OK
Run Code Online (Sandbox Code Playgroud)
强制您的应用程序使用此证书
"Kestrel": {
"Certificates": {
"Default": {
"Path": "localhost.pfx",
"Password": ""
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然@chrsvdb 提供的答案很有帮助,但它并不能解决所有问题。我仍然遇到服务间通信问题(HttpClient - PartialChain 错误),而且您必须重新配置 Kestrel 以使用您自己的证书。可以创建自签名证书并将其导入到 .NET SDK。1.3.6.1.4.1.311.84.1.1您所需要做的就是在证书中指定扩展名。
之后,可以将证书导入到.NET Core SDK中并受信任。信任 Linux 有点困难,因为每个应用程序都可以拥有自己的证书存储。例如,Chromium 和 Edge 使用 nssdb,可以certutil按照 John Duffy 的描述进行配置。不幸的是,当您将应用程序安装为 snap 时,nssdb 的位置可能会有所不同。然后每个应用程序都有自己的数据库。例如,对于 Chromium Snap,路径将为$HOME/snap/chromium/current/.pki/nssdb,对于 Postman Snap,路径将为 $HOME/snap/postman/current/.pki/nssdb 等等。
因此,我创建了一个脚本来生成证书,并在 Postman Snap、Chmromium Snap、当前用户 nssdb 和系统级别上信任它。它还将脚本导入到 .NET SDK 中,以便 ASP.NET Core 使用它而无需更改配置。您可以在我的博客文章中找到有关该脚本的更多信息https://blog.wille-zone.de/post/aspnetcore-devcert-for-ubuntu
对于 Chrome:
跑步:certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n {FILE_NAME} -i {FILE_NAME}
重新启动 Chrome。
除了 crisvdb 答案之外,我还有一些信息要添加,并且是 Walktrough 的延续。我不发表评论,因为这是非常复杂的评论,但在此答案之前,请先查看 crisvdb 答案,然后返回继续。
openssl verify -CAfile localhost.crt localhost.crt非可选步骤,强制执行。我会帮你的。/etc/ssl/certs以及/usr/share/ca-certificates/在某些情况下/usr/local/share/certificates。sudo update-ca-certificatesappsettings.jsonInterop+Crypto+OpenSslCryptographicException:错误:2006D002:BIO 例程:BIO_new_file:系统库
考虑到错误意味着“拒绝访问”。可能是因为您没有权限或相关。
7b)也可能是找不到文件,我在配置中使用了整个路径:
"Path": "/home/user/www/myfolder1/myapp/localhost.pfx",
Run Code Online (Sandbox Code Playgroud)
如果您在站点的 apache 日志中收到以下错误:
[ssl:error] [remote ::1:yourport] AH01961:为 yoursite.com:443 请求 SSL 代理但未启用 [提示:SSLProxyEngine] [proxy:error] AH00961:HTTPS:无法为 [:: 启用 ssl 支持] 1]:你的端口(本地主机)
您必须在 VirtualHost 之后SSLEngine On和之前设置以下配置ProxyPass
SSLProxyEngine on
Run Code Online (Sandbox Code Playgroud)
如果您在站点的 apache 日志中收到以下错误:
[proxy:error] [client xxxx:port] AH00898: Error during SSL Handshake with remote server returns by / [proxy_http:error] [client xxxx:port] AH01097: pass request body failed to [::1]:port (localhost ) 来自 xxxx()
您必须在 VirtualHost 之后SSLProxyEngine on和之前设置以下配置ProxyPass
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
Run Code Online (Sandbox Code Playgroud)
小智 4
看起来这是 dotnet 全局工具的一个已知问题,并且该特定命令仅适用于 MacOS 和 Windows。请参阅 github 上的此问题:Issue 6066。
基于这篇SO文章,Linux用户似乎可以找到一个解决方法:ASP.Net Core application service only Listening to Port 5000 on Ubuntu。
| 归档时间: |
|
| 查看次数: |
48959 次 |
| 最近记录: |