启动 Kestrel ASP.NET 服务器的证书问题 - Windows 10、C#、VS2019

Certificate problem starting Kestrel ASP.NET server - Windows 10, C#, VS2019

我的 ASP.NET 服务器周五 运行 正常。今天(星期一)我什至无法启动它。错误是:

crit: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to start Kestrel.
System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions)
   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IServerAddressesFeature addresses, KestrelServerOptions serverOptions, ILogger logger, Func`2 createBinding)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)

我试了dotnet dev-certs https --trust很多次都没有用。每次都提示我信任证书,每次都有不同的指纹。

...但没有任何变化,服务器仍然失败并显示相同的错误消息。 dotnet dev-certs https --check 只是说 No valid certificate found. 我试过 dotnet dev-certs https --clean 声称成功(但没有显示任何提示),然后 dotnet dev-certs https --trust 但是当我启动服务器时仍然是同样的错误。

我尝试查看控制面板中的证书管理器 (certmgr.msc),因为这样做似乎可以帮助其他人(在不同的站点上)解决同样的错误,但我不得不承认我是none 越看越聪明。以下是“个人”下显示的内容:

发现服务器通过 IIS 运行良好,运行 使用 Visual Studio 2019 年的 IIS 配置文件。好的,我可以去调整客户端代码与不同的 TCP 端口通信,或者学习如何更改 IIS 服务器端口(launchSettings.json 对吗?)..但我更愿意了解这里实际上发生了什么,并学习如何正确修复它。

如果有帮助,我的 Startup.Configure() 说:

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // for options and correct order, see https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();

            // app.UseAuthentication();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapRazorPages();
            });
        }

所以:

  1. 如何以实际有效的方式将开发证书放入默认证书位置(无论是什么??)? <-- 我今天首选的快速解决方案:/
  2. 或者,我如何自己创建开发证书,以及如何告诉我的服务器在哪里可以找到它?
  3. 或者,我如何制作一个真正的证书(来自我组织的“官方”证书??)然后我如何使用它让客户端和服务器实际检查它,以获得良好的安全性? <-- 我的最终目标,但我目前还不够了解能够做到这一点 - 目前,我的安全来自单独网络上的 运行 客户端和服务器。

这就是最终对我有用的方法。

问题是虽然证书管理器没有显示任何过期的 ASP.NET 证书,但证书管理器只查看本地机器存储,而不查看用户存储。

我转到管理控制台(mmc 从命令行)并为当前用户添加了证书管理单元。

当我 运行 那个时候,我在个人/证书和受信任的根证书颁发机构/证书下发现了一大堆 ASP.NET 证书,其中一些已过期。我都删了。

然后我再次运行dotnet dev-certs https --trust,然后我的服务器启动了。耶!