为什么在存在证书时 Kestrel 无法启动?
Why does Kestrel fail to start when certificates are present?
我在 Windows Server 2019 上使用 Apache 2.4 作为 Kestrel 的反向代理。我已经在服务器上 运行 安装了一个应用程序。我在 C:\Apache24\conf\sites-enabled
中使用自己的 appname.conf
文件设置了第二个应用程序,并将新的、未过期的 SSL 证书文件添加到 C:\Apache24\conf\ssl\appname
。
在应用程序的 Program.cs
中,这是 CreateHostBuilder
,我在其中指定了要使用的端口,因此它们与第一个应用程序的不同:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://localhost:5002", "https://localhost:5003");
webBuilder.UseStartup<Startup>();
});
当 运行 在服务器上启动应用程序的命令 (dotnet appname.dll
) 时,我收到此错误:
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.
尽管我有真正的 SSL 证书,但我有 运行 dotnet dev-certs https --trust
,正如错误提示的那样,甚至从 Windows 证书管理器中删除了证书按照建议 on Github 首先使用 GUI,但无济于事。
非常感谢任何帮助。
正如 Lex Li 在评论中指出的那样,UseUrls()
不需要 URL 的 https
版本。要在同一台服务器上安装其他应用程序,只需向 Kestrel 提供一个未使用的端口,这就是它的完成方式。 CreateHostBuilder
应该是这样的:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://localhost:5002");
webBuilder.UseStartup<Startup>();
});
我在 Windows Server 2019 上使用 Apache 2.4 作为 Kestrel 的反向代理。我已经在服务器上 运行 安装了一个应用程序。我在 C:\Apache24\conf\sites-enabled
中使用自己的 appname.conf
文件设置了第二个应用程序,并将新的、未过期的 SSL 证书文件添加到 C:\Apache24\conf\ssl\appname
。
在应用程序的 Program.cs
中,这是 CreateHostBuilder
,我在其中指定了要使用的端口,因此它们与第一个应用程序的不同:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://localhost:5002", "https://localhost:5003");
webBuilder.UseStartup<Startup>();
});
当 运行 在服务器上启动应用程序的命令 (dotnet appname.dll
) 时,我收到此错误:
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.
尽管我有真正的 SSL 证书,但我有 运行 dotnet dev-certs https --trust
,正如错误提示的那样,甚至从 Windows 证书管理器中删除了证书按照建议 on Github 首先使用 GUI,但无济于事。
非常感谢任何帮助。
正如 Lex Li 在评论中指出的那样,UseUrls()
不需要 URL 的 https
版本。要在同一台服务器上安装其他应用程序,只需向 Kestrel 提供一个未使用的端口,这就是它的完成方式。 CreateHostBuilder
应该是这样的:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://localhost:5002");
webBuilder.UseStartup<Startup>();
});