ASP.NET Core中的net::ERR_CERT_AUTHORITY_INVALID问题

36

当我尝试从SPA请求我的Web API时,在ASP.NET Core中出现net::ERR_CERT_AUTHORITY_INVALID错误。

解决此问题的第一种方法是从浏览器高级 - 前往localhost(不安全)访问我的ASP.NET Core地址,然后来自我的SPA的请求将起作用。但每次开始工作时都需要重复此过程。

enter image description here

我找到的另一种解决方案是this。简而言之,解决方案是运行命令:dotnet dev-certs https --trust。我使用的是Windows系统,所以根据链接的文章,在Windows上它将被添加到证书存储中

但是,即使我运行了该命令,仍然会在请求中遇到net::ERR_CERT_AUTHORITY_INVALID问题。我该怎么办?


8
运行命令 dotnet dev-certs https --trust 后,我们需要关闭并重新打开浏览器。 - CSS
3
@CSS感谢你的建议。我尝试了下面的所有方法,但直到关闭并重新打开浏览器才起效。 - Mark Good
我在Visual Studio中运行了Edge,但直到我关闭了电脑上所有的Edge实例之后,它才能正常工作。然后再次运行应用程序就可以了。 - JayTee
8个回答

28
按照以下顺序执行:
  1. dotnet dev-certs https --clean
  2. C:\Users\%username%\AppData\Roaming\ASP.NET\https中删除您的密钥和pem文件
  3. dotnet dev-certs https --trust
  4. 使用"start": "set HTTPS=true&&react-scripts start"命令运行SPA项目

如果在执行其他步骤之前先运行项目(第4步),则权限不被信任(由第3步完成),导致权限无效错误。


完美,这对我解决了问题 - 谢谢! - CodeThief
2
步骤1至3对我有效。我不知道如何或在哪里进行第4步,所以可能已经设置好了,但是使用播放按钮运行它就可以了。 - paulguy
2
不知怎么的,我在/Roaming目录下没有/ASP.NET文件夹。 - undefined

21
运行命令dotnet dev-certs https --trust会在您的设备上创建一个自签名证书。该证书将被颁发给localhost域。在我的情况下,运行后证书已创建,但未添加到“受信任的根证书颁发机构”。
要添加证书,您需要打开certmgr.msc(按下win+r并运行certmgr.msc),然后转到“个人”证书并导出颁发给localhost且具有正确到期时间的.cer证书。
如果您在那里无法找到证书,则可以进入浏览器,单击不安全连接图标,然后打开无效证书并转到详细信息选项卡,再点击“复制到文件...”,这也应该创建一个.cer证书。
接下来,转到“受信任的根证书颁发机构”并将证书导入其中。完成后,证书将在您的本地计算机中有效。您可能需要重新启动浏览器和服务。

4
对我来说,在管理员命令行中执行“dotnet dev-certs https --trust”解决了这个问题。 - EKanadily
1
我也不得不重新启动VS。 - MentallyRecursive
1
经过几个小时的尝试使用 "dotnet dev-certs https --clean / --trust / --check" 命令,我尝试了这个解决方案(从个人导出并导入到受信任的证书),结果成功了。非常感谢你。 - Peter van Mourik

15

在我的情况下,这个方法有效:

清除旧证书并生成新的受信任证书。运行以下列出的命令:

  1. dotnet dev-certs https --clean
  2. dotnet dev-certs https --trust

前往 %APPDATA%\Microsoft\UserSecrets 并删除所有目录 --> 这非常重要

重新运行应用程序。现在应该没有 SSL 错误了。

来源:https://joeblogs.technology/2021/11/neterr_cert_date_invalid/


6

在您的应用程序中,通过NuGet包添加对Microsoft.AspNetCore.Authentication.Certificate的引用。然后在Startup.ConfigureServices方法中编写以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(
        CertificateAuthenticationDefaults.AuthenticationScheme)
        .AddCertificate();

    // All other service configuration
}


在Startup.Configure方法中添加app.UseAuthentication();。否则,HttpContext.User将不会被设置为ClaimsPrincipal。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   app.UseAuthentication();

    // All other app configuration
}

来源:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/certauth?view=aspnetcore-3.1

本文讲解了 ASP.NET Core 3.1 中如何使用证书认证实现身份验证的方法。通过此方法,您可以在客户端和服务器之间建立基于证书的信任,从而保证数据传输的安全性和完整性。

@MarkEntingh,答案是正确的。如果您有任何疑问,应仔细检查链接的源代码。 - some1 here
很奇怪,这个应用在其他两台开发者的机器上都能正常运行。但是在第三台机器上(全新安装的VS2019),出现了问题。当我在那台机器上尝试了这个建议后,结果从ERR_CERT_AUTHORITY_INVALID变成了403(禁止)。也许这个认证模块干扰了我们已经使用的“AddMicrosoftIdentityWebApiAuthentication”? - Qwertie
我发现通过调换调用顺序——在调用AddMicrosoftIdentityWebApiAuthentication之前调用AddAuthentication——可以使Chrome中的错误消失,但是Firefox会显示一个新的错误(在Network | Security子选项卡中显示为MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT)。 - Qwertie

1

对于Ubuntu,您需要执行一些额外的步骤:

  1. 运行sudo apt-get install libnss3-tools
  2. 运行ls $HOME/.pki/nssdb检查该目录是否存在。
  3. 如果不存在,则运行mkdir $HOME/.pki/nssdb创建该目录。
  4. 使用dotnet dev-certs https导出证书,然后使用sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
  5. 运行命令sudo certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crtsudo certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crt

重新启动浏览器。

更多细节请参见此链接(适用于Ubuntu和其他Linux发行版)。


1
虽然我们都希望 "dotnet dev-certs https --trust" 可以完成所有这些任务,但事实是微软的工具并不那么强大。在我的情况下,它只浪费了5个小时!
很多线索来自于StackOverflow.com上的各种答案,包括@trixo在这个帖子中的回答。
停止IIS Express
通过右键单击托盘图标,然后点击退出
在命令提示符上输入以下命令
- dotnet dev-certs https --clean - dotnet dev-certs https --trust
修复IIS Express
控制面板 > 程序和功能 > 定位IIS Express > 右键单击并点击"修复"

0
步骤1:打开C:\Users\YourUserName\AppData\Roaming\ASP.NET\Https

enter image description here

第二步:检查应用程序的.pfx文件是否可用,该文件在运行应用程序时会生成错误net::ERR_CERT_AUTHORITY_INVALID,然后将其删除。
第三步:重新运行应用程序。

-2
我按照这些步骤操作,但在Chrome中仍然出现了“不安全”的提示信息。于是我尝试在startup.cs文件的Configure()方法中注释掉以下代码行://app.UseHttpsRedirection(); 这样就解决了问题。

如果您将app.UseHttpsRedirection()注释掉,那么它只是绕过了这个问题。这只是告诉应用程序不要重定向到https。例如,如果您通常启动https://localhost:5001,那么注释掉它会启动http://localhost:5000,并且是的,您将不再收到错误,因为它不再使用https。我想如果您不需要使用https,这也是可以的。 - Matt Fricker
1
我尝试了答案,但没有起作用,然后我又尝试了这个,但还是不行。我不明白为什么他们要像防止网络恐怖袭击一样保护一个简单的ASP .NET服务器和Angular项目。 - Franco

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