Невозможно запустить ASP.NET Core с HTTPS

У меня есть приложение WPF, которое запускает основное веб-приложение ASP.NET.

Когда я запускаю проект WEB API в качестве запускаемого проекта с этими конфигурациями, он отлично работает для HTTPS. Но когда я пытаюсь запустить это приложение из среды WPF, оно не работает для HTTPS.

Конфигурации:

  1. Конфигурация веб-API:

введите описание изображения здесь

  1. В файле Startup.cs:
public void ConfigureServices(IServiceCollection services)
        {

                services.AddMvc();

                services.Configure<MvcOptions>(options =>
                {
                    options.Filters.Add(new RequireHttpsAttribute());
                });
        }

Основной метод выглядит так:

public static void InitHttpServer()
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("https://localhost:44300/")
            //.UseApplicationInsights()
            .Build();

        host.Run();
    }

Когда я проверяю порт с помощью команды netstat, он показывает:

введите описание изображения здесь

Почтальон говорит:

введите описание изображения здесь

Ни один отладчик метода действия в приложении не используется.

PS: когда я отменяю изменения для HTTPS и пытаюсь использовать HTTP, он работает нормально.

Основной метод для HTTP имеет другой порт и ни одно из изменений конфигурации, упомянутых выше.

2 ответа

Решение

Когда вы включаете SSL в настройках веб-сервера, вы включаете SSL для IIS, а не ваше приложение. При запуске веб-API из Visual Studio он работает за IIS в качестве службы обратного прокси-сервера. Вот почему вы получаете SSL только тогда, когда запускаете его как стартовый проект. Когда вы запускаете его из своего приложения WPF, API работает только на Kestrel.

Поэтому, чтобы включить SSL на Kestrel, вам нужно добавить сертификат и передать его при настройке Kestrel.

var cert = new X509Certificate2("YourCert.pfx", "password");

var host = new WebHostBuilder()
    .UseKestrel(cfg => cfg.UseHttps(cert))
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .UseUrls("https://localhost:44300/")
    //.UseApplicationInsights()
    .Build();

Принудительное использование HTTPS в ASP.NET Core
https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-6.0&amp;amp;tabs=visual-studio



Локальная разработка с помощью ASP.NET Core по HTTPS, SSL и самоподписанным сертификатам
https://www.hanselman.com/blog/developing-locally-with-aspnet-core-under-https-ssl-and-selfsigned-certs

Создание самозаверяющих сертификатов с помощью .NET CLI
https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide

Другие вопросы по тегам