启动 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();
});
}
所以:
- 如何以实际有效的方式将开发证书放入默认证书位置(无论是什么??)? <-- 我今天首选的快速解决方案:/
- 或者,我如何自己创建开发证书,以及如何告诉我的服务器在哪里可以找到它?
- 或者,我如何制作一个真正的证书(来自我组织的“官方”证书??)然后我如何使用它让客户端和服务器实际检查它,以获得良好的安全性? <-- 我的最终目标,但我目前还不够了解能够做到这一点 - 目前,我的安全来自单独网络上的 运行 客户端和服务器。
这就是最终对我有用的方法。
问题是虽然证书管理器没有显示任何过期的 ASP.NET 证书,但证书管理器只查看本地机器存储,而不查看用户存储。
我转到管理控制台(mmc
从命令行)并为当前用户添加了证书管理单元。
当我 运行 那个时候,我在个人/证书和受信任的根证书颁发机构/证书下发现了一大堆 ASP.NET 证书,其中一些已过期。我都删了。
然后我再次运行dotnet dev-certs https --trust
,然后我的服务器启动了。耶!
我的 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();
});
}
所以:
- 如何以实际有效的方式将开发证书放入默认证书位置(无论是什么??)? <-- 我今天首选的快速解决方案:/
- 或者,我如何自己创建开发证书,以及如何告诉我的服务器在哪里可以找到它?
- 或者,我如何制作一个真正的证书(来自我组织的“官方”证书??)然后我如何使用它让客户端和服务器实际检查它,以获得良好的安全性? <-- 我的最终目标,但我目前还不够了解能够做到这一点 - 目前,我的安全来自单独网络上的 运行 客户端和服务器。
这就是最终对我有用的方法。
问题是虽然证书管理器没有显示任何过期的 ASP.NET 证书,但证书管理器只查看本地机器存储,而不查看用户存储。
我转到管理控制台(mmc
从命令行)并为当前用户添加了证书管理单元。
当我 运行 那个时候,我在个人/证书和受信任的根证书颁发机构/证书下发现了一大堆 ASP.NET 证书,其中一些已过期。我都删了。
然后我再次运行dotnet dev-certs https --trust
,然后我的服务器启动了。耶!