ASP. NET Core 3.1 Web API: можно ли самостоятельно размещать его как Windows службу с https и использовать какой-нибудь сертификат, например IIS? - PullRequest
0 голосов
/ 10 апреля 2020

Я использую по умолчанию ASP. NET Core 3.1 веб-приложение API, где я настроил его для https, а также использую app.UseHttpsRedirection();.

Теперь я размещаю его как * Сервис 1015 *, использующий этот пакет nuget: Microsoft.Extensions.Hosting.WindowsServices.

Хостинг завершен, но я получаю результат API, используя http, но он вызывает ошибку при попытке использовать https, например, https://localhost:5001/weatherforecast

Могу ли я создать какой-нибудь самозаверяющий сертификат, такой как IIS, назначить его и запускать как https?

1 Ответ

1 голос
/ 10 апреля 2020

Да, вы можете - но с некоторыми ограничениями браузера.

Создать сертификат, а затем либо зарегистрировать его в хранилище сертификатов, либо загрузить его вручную в Kestrel, например:

certificate.json

{
  "certificateSettings": {
    "fileName": "localhost.pfx",
    "password": "YourSecurePassword"
  }
}

и используйте его примерно так:

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddEnvironmentVariables()
            .AddJsonFile("certificate.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"certificate.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true)
            .Build();

        var certificateSettings = config.GetSection("certificateSettings");
        string certificateFileName = certificateSettings.GetValue<string>("filename");
        string certificatePassword = certificateSettings.GetValue<string>("password");

        var certificate = new X509Certificate2(certificateFileName, certificatePassword);

        var host = new WebHostBuilder()
            .UseKestrel(
                options =>
                {
                    options.AddServerHeader = false;
                    options.Listen(IPAddress.Loopback, 443, listenOptions =>
                    {
                        listenOptions.UseHttps(certificate);
                    });
                }
            )
            .UseConfiguration(config)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .UseUrls("https://localhost:443")
            .Build();

        host.Run();
    }
}

Фрагменты, взятые из этого хорошего поста в блоге: https://www.humankode.com/asp-net-core/develop-locally-with-https-self-signed-certificates-and-asp-net-core

...