我设法绕过了这个问题:
在您执行任何操作之前,请清除旧证书并生成新的信任证书。
dotnet dev-certs https --clean
dotnet dev-certs https --trust
如果上述过程失败,请手动删除证书,然后再尝试 clean/trust 命令。
获取你遇到问题的 Web 应用程序的用户机密 ID。在项目文件夹中搜索 UserSecrets.UserSecretsIdAttribute(",并取出 GUID。
前往 %APPDATA%\Microsoft\UserSecrets
并打开包含你所遇到的问题项目的 GUID 的文件夹,保持它处于打开状态。
创建一个新的 Asp .Net Core 项目,获取它的 secrets
GUID,前往相应的机密文件夹 (%APPDATA%\Microsoft\UserSecrets\GUID
) 并打开文件 secrets.json
。你应该看到以下内容
{
"Kestrel:Certificates:Development:Password": "8353f2ec-3cc0-4052-9776-9585b6abd346"
}
将新创建项目中的secrets.json
设置复制并用它覆盖在已损坏项目中的secrets.json
开发密码
这样,我成功让旧项目使用了新生成的证书。虽然有点取巧,但是它能够起作用。
基于Pedro的答案,
我使用了:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
清理/更换旧证书。
然后我去了:
%APPDATA%\Microsoft\UserSecrets
并删除了那里找到的所有文件夹。
现在我的应用程序可以正常运行。 创建一个新的 .net core 6 应用程序并运行它并没有创建新的文件夹,因此我不知道是否不再需要它们。
对于我在Visual Studio 2022上使用Angular的ASP.NET Core项目:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
dotnet dev-certs https --check
然后我停止了Visual Studio,并在项目中删除了.key
和.pem
文件。
C:\Users\[your_user]\AppData\Roaming\ASP.NET\Https
%APPDATA%\ASP.NET\Https
中找到的项目专用证书所需的密码应用于Kestrel:Certificates:Development:Password
设置。dotnet dev-certs
命令安装适当的证书。我认为最方便的方法是从%APPDATA%\ASP.NET\Https
文件夹中删除所有项目证书。dotnet dev-certs
命令,而在于Visual Studio创建项目的隐藏逻辑以及Kestrel如何处理证书。我在不同类型的项目中遇到了相同的问题:
当在Windows上使用带有Angular的ASP.NET Core模板时遇到问题,您可以尝试:
这个解决方案也适用于其他高级模板,如Jason Taylor的Clean Architecture Solution Template。
当使用Visual Studio创建启用Docker(不是总是)的ASP.NET Core Web API项目时,可能会遇到问题。
在尝试了这个问题的所有替代方案并使用Microsoft的使用.NET CLI生成自签名证书和在ASP.NET Core中强制使用HTTPS指南后,我发现我的过期证书位于C:\Users[your_user]\AppData\Roaming\ASP.NET\Https文件夹中,名称为my_api_assembly_name.pfx。
我如何重新生成我的证书?
停止应用程序。 打开“文件资源管理器”。 将“%APPDATA%\ASP.NET\https”粘贴到地址栏中,然后按“回车”键。 它会自动导航到“C:\Users\[your_user]\AppData\Roaming\ASP.NET\Https”。 删除“your_my_api_assembly_name.pfx”。 打开MMC(“开始”>“运行”>“MMC”)。打开“证书”快照(“文件”>“添加/删除快照”)。 在提示时选择“我的当前帐户”。 在“证书 - 当前用户”下选择“个人\证书”文件夹。 找到并选择“localhost”域的证书,并使用友好名称“ASP.NET Core HTTPS development certificate”。 删除“localhost”证书。 对于“个人\证书”文件夹和“受信任的根证书颁发机构\证书”文件夹下的友好名称为“ASP.NET Core HTTPS development certificate”的所有“localhost”证书,重复“localhost”证书删除过程。 以管理员身份打开您的“Windows 终端”。 运行dotnet dev-certs https -ep $env:USERPROFILE\AppData\Roaming\ASP.NET\Https\your_api_assembly_name.pfx -p your_user_secrets_id
:
更改“your_my_api_assembly_name”为您自己的程序集名称。
如何检索“your_user_secrets_id”?
打开文本编辑器中的“your_project.csproj”(或在Visual Studio解决方案资源管理器中双击项目),查找名为“UserSecretsId”的节点。在此节点内,有您的“your_user_secrets_id”。
否则,如果您的项目文件中没有“UserSecretsId”节点:
打开“文件资源管理器”。
将“%APPDATA%\Microsoft\UserSecrets”粘贴到地址栏中,然后按“回车”键。
它会自动导航到“C:\Users\[your_user]\AppData\Roaming\Microsoft\Secrets”。
打开名为您的项目GUID的文件夹(您可以在您的“your_solution.sln”文件中获取您的)。
打开“secrets.json”文件,并查找名为“Kestrel:Certificates:Development:Password”的属性。此属性的值是您的“your_user_secrets_id”。
您的应用程序的“pfx”文件将自动重新生成。
运行dotnet dev-certs https --trust
。
您将被提示安装一个新的localhost证书。
单击“是”。
再次启动您的应用程序。我猜您正在使用IIS Express托管您的应用程序。如果是这样,那么听起来您错过了将证书链接到您的应用程序,如this blog post所述:
转到C:\ Program Files(x86)\ IIS Express
,并从命令行运行以下内容,输入正确的端口号和新证书指纹:
IisExpressAdminCmd.exe setupsslUrl -url:https://localhost:PORT/ -CertHash:THUMB
dotnet run
运行应用程序的。如果我成功解决了这个问题,我会在这里发布。 - Pedro Yan Ornelas