首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我运行`dev certs -c`时没有找到证书,但是当我运行`dev certs--信任‘时,它说已经有了一个有效的证书。

为什么当我运行`dev certs -c`时没有找到证书,但是当我运行`dev certs--信任‘时,它说已经有了一个有效的证书。
EN

Stack Overflow用户
提问于 2021-04-30 20:31:24
回答 1查看 228关注 0票数 2

我在Mac上,无法让dotnet识别我的开发证书,从而阻止我在本地主机上运行https。

当我运行dotnet dev-certs https -c -v时,我会返回No valid certificate found.

但是当我运行dotnet dev-certs https --trust时,我返回A valid HTTPS certificate is already present.,或者在我删除了密钥链中的证书之后,我得到了The HTTPS developer certificate was generated successfully.

是什么让这两个命令得到不同的响应?为什么一个能找到它,而另一个却找不到?

我已经尝试删除我的密钥链中的本地主机证书并重新生成它们。我已经在dotnet的三个不同的主要版本中尝试了这一点。它们生成的很好,但是在运行上述命令时,我总是得到相同的结果。我尝试过运行dotnet certs https --clean命令,但这实际上不起作用。我必须进入密钥链并手动删除它们。我尝试过用dotnet-dev-certs卸载和重新安装dotnet tool uninstall --global dotnet-dev-certs工具,但是没有任何成功。为了以防万一,我尝试运行sudo中提到的所有命令。

为什么https --trust命令会说已经有一个有效的证书,但是其他什么都找不到?即使它在钥匙链里?

或者,是否有另一种使用kestrel运行https的方法?就像在项目的根中生成一个自签名证书的方法,然后指向它吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-05 10:31:29

可能是这个问题的几个原因。我在修我的车的时候发现了三个。

1. dotnet有问题。

当您运行命令时:

代码语言:javascript
复制
dotnet dev-certs https

通常的反应必须是这样的:

代码语言:javascript
复制
% dotnet dev-certs https
The HTTPS developer certificate was generated successfully.

当您运行命令时

代码语言:javascript
复制
dotnet dev-certs https --trust

您必须得到如下响应:

代码语言:javascript
复制
% dotnet dev-certs https --trust
Trusting the HTTPS development certificate was requested. If the certificate is not already trusted we will run the following command:
'sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain <<certificate>>'
This command might prompt you for your password to install the certificate on the system keychain.
A valid HTTPS certificate is already present.

在这里,最后一行可以是A valid HTTPS certificate is already present.,也可以说证书是成功信任的,这取决于您是执行了一次还是多次执行该命令。

但是,如果运行这些命令,结果如下所示:

这意味着您的dotnet版本肯定有问题。我建议从mac卸载dotnet,并尝试从官方网站重新安装它。

下面是一种快速有效的卸载dotnet的方法:https://stackoverflow.com/a/44089766/1928149

现在再次尝试添加证书。

2. Dotnet可能无法访问密钥链。

在本例中,运行以下两个命令:

代码语言:javascript
复制
dotnet dev-certs https --check
dotnet dev-certs https --clean

现在,只需转到macbook中的Keychain Access应用程序,搜索名为localhost的证书并删除它们。(您还可以在删除之前将其拖放到一个文件夹中,以防需要备份。)

删除所有证书后,运行以下命令:

代码语言:javascript
复制
dotnet dev-certs https
dotnet dev-certs https --trust

现在,当您运行以下操作时:

代码语言:javascript
复制
dotnet dev-certs https --check --trust

您应该找到一个既可信又可用的证书。

3.读取证书时的CryptographicException。

运行以下命令:

代码语言:javascript
复制
dotnet dev-certs https -v

这应该会显示一些有关证书的调试信息。如果输出给出一个异常,类似于:

代码语言:javascript
复制
System.Security.Cryptography.CryptographicException certificate 'certificate-name` is corrupted

代码语言:javascript
复制
System.Security.Cryptography.CryptographicException: ASN1 corrupted data

我就是这样看的:

这意味着由于特定的无关证书,dotnet在从密钥链读取证书时出现问题。转到您的Keychain Access应用程序并查找证书certificate-name,如上面的日志所示。保存此证书的备份,并从Keychain Access应用程序中删除它。再次尝试运行以下命令:

代码语言:javascript
复制
dotnet dev-certs https -v

希望它现在没有任何例外地列出证书。

现在,按照上面的Point #2操作,希望现在一切都能正常进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67340106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档