部署到 Windows 服务器后,无法在带有 WebAPI 的 .NET Core 5.0 控制台中使用 SSL

Unable to use SSL in a .NET Core 5.0 Console with WebAPI after deployment to Windows Server

我创建了一个 WebAPI .Net 5 应用程序,它侦听 HTTPS 端口 8286。当我 运行 它在 Visual Studio 时,一切都很好。

一旦我执行“发布”并尝试在我们的 Windows Server 2012 上 运行 它,我得到一个“无法启动 Kestrel。 System.InvalidOperationException: 无法配置 HTTPS 终结点。未指定服务器证书,并且找不到默认的开发人员证书或已过期。 生成开发人员证书 运行 'dotnet dev-certs https'。信任证书(仅限 Windows 和 macOS)运行 'dotnet dev-certs https --trust'..."

我在服务器上安装了 SSL 证书。它适用于 IIS 和 .NET 4.8 WebAPI 自托管 OWIN 应用程序

使用netsh http show sslcert 我可以看到证书已绑定

这是我的 CreateHostBuilder 函数:

public static IHostBuilder CreateHostBuilder(string[] args)
        {
            Console.WriteLine("USE URLS: https://*:8286/");
            return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("https://*:8286/");
                });
        }

好的,下面是 运行 来自命令行(使用 Kestrel 服务器)的应用程序时的解决方案

您需要在 appsettings.json 中添加以下部分

"Kestrel": {
"Endpoints": {
  "Http": {
    "Url": "http://*:1111"
  }
  ,
  "Https": {
    "Url": "https://*:2222",
    "Certificate": {
      "Path": "my_ssl.pfx",
      "Password": "my_password"
    }
  }
}}

显然,要使其正常工作,您需要 pfx 文件。即使您部署到 Linux.

,这也会起作用

顺便说一句,如果您将此添加到 appsettings.json,当 运行 来自 Visual Studio

时,它将覆盖 launchSettings.json 中的端口