我在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的方法?就像在项目的根中生成一个自签名证书的方法,然后指向它吗?
发布于 2022-09-05 10:31:29
可能是这个问题的几个原因。我在修我的车的时候发现了三个。
1. dotnet有问题。
当您运行命令时:
dotnet dev-certs https通常的反应必须是这样的:
% dotnet dev-certs https
The HTTPS developer certificate was generated successfully.当您运行命令时
dotnet dev-certs https --trust您必须得到如下响应:
% 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可能无法访问密钥链。
在本例中,运行以下两个命令:
dotnet dev-certs https --check
dotnet dev-certs https --clean现在,只需转到macbook中的Keychain Access应用程序,搜索名为localhost的证书并删除它们。(您还可以在删除之前将其拖放到一个文件夹中,以防需要备份。)
删除所有证书后,运行以下命令:
dotnet dev-certs https
dotnet dev-certs https --trust现在,当您运行以下操作时:
dotnet dev-certs https --check --trust您应该找到一个既可信又可用的证书。
3.读取证书时的CryptographicException。
运行以下命令:
dotnet dev-certs https -v这应该会显示一些有关证书的调试信息。如果输出给出一个异常,类似于:
System.Security.Cryptography.CryptographicException certificate 'certificate-name` is corrupted或
System.Security.Cryptography.CryptographicException: ASN1 corrupted data我就是这样看的:

这意味着由于特定的无关证书,dotnet在从密钥链读取证书时出现问题。转到您的Keychain Access应用程序并查找证书certificate-name,如上面的日志所示。保存此证书的备份,并从Keychain Access应用程序中删除它。再次尝试运行以下命令:
dotnet dev-certs https -v希望它现在没有任何例外地列出证书。
现在,按照上面的Point #2操作,希望现在一切都能正常进行。
https://stackoverflow.com/questions/67340106
复制相似问题