Я создаю веб-приложение 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?), А не с помощью пользовательских методов, таких как Вот этот
Да, это тот, на который я ссылался в своем вопросе ближе к концу. Однако я хотел бы иметь возможность настроить Kestrel сам. Ваш подход рекомендуется для таких приложений?
Я думаю, что это немного изменилось, но долгое время пустельга не предназначалась для непосредственного обслуживания извне. Документация по-прежнему сосредоточена на хостинге за nginx / apache /… так что я предполагаю, что это все еще наиболее распространенная установка. Мы используем github.com/jwilder/nginx-proxy (с докером), что дает нам простой способ получить сертификаты letsencrypt для всех наших основных приложений asp.net.
Может, эта статья вам поможет? docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
Выглядит многообещающе, попробуем этот подход.
Кестрел по-прежнему не рекомендуется использовать напрямую. Он выполняет свою работу, но это не настоящий полноценный веб-сервер, и в нем отсутствуют многие функции и элементы управления, которые могут вам понадобиться.
Документация, упомянутая 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 и на промежуточном сервере.
Мы используем пустельгу за nginx и позволяем nginx завершать ssl-соединения. Но я думаю, что следующая статья описывает настройку blogs.msdn.microsoft.com/webdev/2017/11/29/…