Asp.net core如何继续使用过期的证书?

28

最近,我的本地主机证书已过期,我已经去“sertmgr.msc”删除了所有本地主机证书,重新启动了VS并向Windows添加了新的本地主机证书。 但是当我再次运行我的应用程序时,仍然使用旧的过期证书而不是新的证书,有人知道如何解决吗? 我已经运行了以下命令。

dotnet dev-certs https --clean
dotnet dev-certs https --trust

过期的证书 证书管理中的证书

6个回答

56

我设法绕过了这个问题:

  1. 在您执行任何操作之前,请清除旧证书并生成新的信任证书。

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开发密码

  • 这样,我成功让旧项目使用了新生成的证书。虽然有点取巧,但是它能够起作用。


    7
    太棒了,它正在工作。我刚刚在“%APPDATA%\Microsoft\UserSecrets”中删除了“Kestrel:Certificates:Development:Password”部分,一切都很好。谢谢,真的帮了大忙。 - 笑问苍天
    7
    删除UserSecrets文件夹是诀窍。非常感谢。 - Mohammad Jaber
    3
    当我删除了 "Kestrel:Certificates:Development:Password" 时,问题得到解决。我相信删除 UserSecrets 文件夹也能起到同样的作用。 - Guilherme de Jesus Santos
    2
    第三步 - 用户密钥 Id 应该在 .csproj 文件中。右键单击项目-> 编辑项目文件以打开它。 - r590
    1
    谢谢@Pedro Yan Ornelas。我在这方面遇到了问题,你提到的UserSecrets救了我的一天。 - LeoD
    显示剩余5条评论

    6

    基于Pedro的答案,

    我使用了:

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust
    

    清理/更换旧证书。

    然后我去了:

    %APPDATA%\Microsoft\UserSecrets
    

    并删除了那里找到的所有文件夹。

    现在我的应用程序可以正常运行。 创建一个新的 .net core 6 应用程序并运行它并没有创建新的文件夹,因此我不知道是否不再需要它们。


    不要从那里删除所有的文件夹!如果你有使用实际用户密码和一些密码存储在那里的应用程序,它们将被删除。首先检查你要删除的内容! - undefined

    4

    对于我在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
    

    2
    我想对Pedro在Windows上的答案提供一些背景信息。
    通过阅读这篇文章并进行测试,我发现在%APPDATA%\ASP.NET\Https中找到的项目专用证书所需的密码应用于Kestrel:Certificates:Development:Password设置。
    回答:当您删除密码设置或项目证书时,Kestrel开始按预期工作,并使用dotnet dev-certs命令安装适当的证书。我认为最方便的方法是从%APPDATA%\ASP.NET\Https文件夹中删除所有项目证书。
    这似乎是Visual Studio在创建项目时的问题。但是,我无法使用我的当前版本的Visual Studio 2019重现它。
    总之,问题不在于dotnet dev-certs命令,而在于Visual Studio创建项目的隐藏逻辑以及Kestrel如何处理证书。

    我认为最方便的方法是从%APPDATA%\ASP.NET\Https文件夹中删除所有项目证书。--- 对我有效 - undefined

    2

    我在不同类型的项目中遇到了相同的问题:

    • 使用 VS Code 创建的带 Angular 模板的 ASP.NET Core 项目。
    • 使用 Visual Studio 创建的 ASP.NET Core Web API 项目。

    当在Windows上使用带有Angular的ASP.NET Core模板时遇到问题,您可以尝试:

    1. 停止应用程序。
    2. 打开“文件资源管理器”。
    3. 将“%APPDATA%\ASP.NET\https”粘贴到地址栏中,然后按“回车”键。
    4. 它会自动导航到“C:\Users\[your_user]\AppData\Roaming\ASP.NET\Https”
    5. 删除your_npm_package_name.pemyour_npm_package_name.key文件。
      • your_npm_package_name:是您的Angular客户端应用程序的package.json文件的name属性值。
    6. 打开MMC(开始 > 运行 > MMC)。打开证书快照(文件 > 添加/删除快照)。
    7. 在提示时选择我的当前帐户
    8. 证书-当前用户下选择个人\证书文件夹。
    9. 找到并选择localhost域的证书,并使用友好名称“ASP.NET Core HTTPS开发证书”。
    10. 删除localhost证书。
    11. 重复localhost证书删除过程,以删除个人\证书文件夹和受信任的根证书颁发机构\证书文件夹下所有友好名称为“ASP.NET Core HTTPS开发证书”的localhost证书。
    12. 重新启动应用程序。
    13. 您的应用程序的pemkey文件将自动生成。

    这个解决方案也适用于其他高级模板,如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证书。 单击“是”。 再次启动您的应用程序。

    0

    我猜您正在使用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
    不是IIS,而是控制台。 - 笑问苍天

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接