Как настроить ssl для подготовки / производства в .Net Core 2.1

Я создаю веб-приложение mvc с использованием .NET Core 2.1. В документации по ядру .net в разделе ListenOptions.UseHttps говорится, что он настроит Kestrel с сертификатом по умолчанию (документ найден здесь).

Где Kestrel ищет этот сертификат по умолчанию? Как я могу заменить его для постановки (где я бы хотел использовать один из наших сертификатов демонстрационного сайта)? А для производства (где у меня снова другой сертификат)?

Мой контент Program.cs теперь выглядит так:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebHost.CreateDefaultBuilder(args); //This sets up Kestrel and adds appsettings.json to the configuration
        builder.UseStartup<Startup>();
        builder.ConfigureAppConfiguration((context, configurationBuilder) =>
        {
            var env = context.HostingEnvironment;
            configurationBuilder.SetBasePath(env.ContentRootPath);
        });

        var host = builder.Build();
        host.Run();
    }
}

Мой метод настройки Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc(ConfigureRoutes);
}

Приложение отлично работает с https на локальном хосте. Я ищу способ решить эту проблему с помощью конфигурации (например, appSettings. {Env} .json?), А не с помощью специальных методов, таких как этот


person Wouter van Rij    schedule 08.08.2018    source источник
comment
Мы используем пустельгу за nginx и позволяем nginx завершать ssl-соединения. Но я думаю, что в следующей статье описывается настройка blogs.msdn.microsoft.com/webdev/2017/11/29/   -  person Christoph Lütjen    schedule 08.08.2018
comment
Да, это тот, на который я ссылался в своем вопросе ближе к концу. Однако я хотел бы иметь возможность настроить саму Kestrel. Ваш подход рекомендуется для таких приложений?   -  person Wouter van Rij    schedule 08.08.2018
comment
Я думаю, что это немного изменилось, но долгое время пустельга не предназначалась для непосредственного обслуживания извне. Документация по-прежнему сосредоточена на хостинге за nginx / apache /… так что я предполагаю, что это все еще наиболее распространенная установка. Мы используем github.com/jwilder/nginx-proxy (с докером), что дает нам простой способ получить сертификаты letsencrypt для всех наших основных приложений asp.net.   -  person Christoph Lütjen    schedule 08.08.2018
comment
Может, эта статья вам поможет? docs.microsoft.com / ru-ru / aspnet / core / Основы / серверы /   -  person xneg    schedule 08.08.2018
comment
Выглядит многообещающе, попробуем этот подход.   -  person Wouter van Rij    schedule 08.08.2018
comment
Кестрел по-прежнему не рекомендуется использовать напрямую. Он выполняет свою работу, но это не настоящий полноценный веб-сервер, и в нем отсутствуют многие функции и элементы управления, которые могут вам понадобиться.   -  person Chris Pratt    schedule 08.08.2018


Ответы (1)


Документация, упомянутая xneg, помогла решить эту проблему: Реализация веб-сервера Kestrel в ASP.NET Core

Удалось заставить его работать, изменив файл appsettings.DockerDevelopment.json следующим образом:

{
  "Kestrel": {
    "EndPoints": {
      "HttpsDefaultCert": {
        "Url": "https://*:443"
      },
      "Http": {
        "Url": "http://*:80"
      }
    },
    "Certificates": {
      "Default": {
        "Path": "certifcate.pfx",
        "Password": "*********"
      }
    }
  }
}

Kestrel теперь может запускать мое приложение с использованием https в контейнере Docker и на промежуточном сервере.

person Wouter van Rij    schedule 09.08.2018