Работа с HTTPS

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 06.11.2019

Начиная с версии ASP.NET Core 2.1 были добавлены новые возможности для работы с приложением по протоколу HTTPS. Рассмотрим их.

Отладка по https

Создадим новый проект ASP.NET Core по шаблону Empty.

Https в ASP.NET Core

При создании проекта мы можем отметить поле Configure for HTTPS. Установка этого поля позволит по умолчанию включить отладку проекта по HTTPS. Правда, если мы даже не отметим это поле, мы все равно можем потом добавить в проект поддержку https через его свойства.

При установке отметки после создания проекта он уже сконфигурирован на запуск через HTTPS. В частности, если мы зайдем в Visual Studio в свойства проекта на вкладку Debug, то мы увидим, что на этой вкладке установлено поле Enable SSL:

Configure HTTPS and SSL in ASP.NET Core

В процессе работы с проектом мы можем свободно включать или отключать это поле в зависимости от того, нужна ли нам отладка по Https.

Соответственно после запуска такого проекта он будет запускаться по протоколу HTTPS:

Отладка проекта ASP.NET Core по HTTPS

UseHttpsRedirection

Метод UseHttpsRedirection() объекта IApplicationBuilder добавляет для проекта переадресацию на тот же ресурс только по протоколу https (если приложение имеет поддержку SSL). В частности, изменим в классе Startup метод Configure следующим образом:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	if (env.IsDevelopment())
	{
		app.UseDeveloperExceptionPage();
	}

	app.UseHttpsRedirection();
	app.Run(async (context) =>
	{
		await context.Response.WriteAsync("Hello World!");
	});
}

С помощью метода AddHttpsRedirection() мы можем настроить параметры переадресации. Например, изменим в классе Startup метод ConfigureServices следующим образом:

public void ConfigureServices(IServiceCollection services)
{
	services.AddHttpsRedirection(options =>
	{
		options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
		options.HttpsPort = 44344;
	});
}

Для настройки переадресации в метод AddHttpsRedirection передается функция, которая в качестве параметра принимает объект HttpsRedirectionOptions. Этот объект имеет два свойства:

  • RedirectStatusCode: статусный код переадресации - одно из значений перечисления StatusCodes. По умолчанию применяется значение StatusCodes.Status307TemporaryRedirect

  • HttpsPort: устанавливает порт. Данная опция необходима, если порт отличается от стандартного 443. В данном случае это порт 44344. При запуске в Visual Studio через HTTPS данная опция не учитывается, поскольку порт устанавливает сама Visual Studio.

HTTP Strict Transport Security Protocol (HSTS)

Когда пользователь первый раз обращается к сайту по протоколу http, даже если на самом сайте установлен сертификат ssl и переадресация на https, то пользователь при первом запросе все равно будет обращаться к сайту по незащищенной версии, то есть по протоколу http. Затем будет идти переадресация. Обращение по незащищенному протоколу уже может спровоцировать ряд атак. В связи с чем применяются специальный заголовок Strict-Transport-Security. Этот заголовок отправляется сервером клиенту. Заголовок сообщает браузеру, что к приложению надо обращаться по протоколу https, а не по протоколу http. Кроме того, передаст параметры подобного обращения. Пример заголовка Strict-Transport-Security:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload 

Заголовок имеет три параметра:

  • max-age: задает максимальное действие заголовка (обязательный параметр)

  • includeSubDomains: если этот параметр установлен, то действие применяется ко всем поддоменам

  • preload: если этот параметр установлен, то будет использоваться специальный preload-список доменов, обращение к которым безопасно.

Стоит отметить, что отправка этого заголовка браузеру - это не то же самое, что и переадресация. При переадресации устанавливается редирект одних отдельных адресов на другие. А заголовок Strict-Transport-Security устанавливает глобально политику работы с определенным доменом и его поддоменами.

В ASP.NET Core 2.1+ С помощью метода UseHsts() объекта IApplicationBuilder мы можем отправить браузеру заголовок Strict-Transport-Security. Так, изменим метод Configure в классе Startup следующим образом:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	if (env.IsDevelopment())
	{
		app.UseDeveloperExceptionPage();
	}
	else
	{
		app.UseHsts();
	}

	app.UseHttpsRedirection();
	app.Run(async (context) =>
	{
		await context.Response.WriteAsync("Hello World!");
	});
}

Стоит отметить, что метод UseHsts вызывается, если только приложение уже развернуто для полноценного использования, потому что в процессе разработки использование данного метода может создавать неудобства, так как заголовки кэшируются.

Дополнительно, с помощью метода AddHsts в методе ConfigureServices мы можем настроить параметры заголовка Strict-Transport-Security. Так, изменим, к примеру, метод ConfigureServices в классе Startup следующим образом:

public void ConfigureServices(IServiceCollection services)
{
	services.AddHsts(options =>
	{
		options.Preload = true;
		options.IncludeSubDomains = true;
		options.MaxAge = TimeSpan.FromDays(60);
		options.ExcludedHosts.Add("us.example.com");
		options.ExcludedHosts.Add("www.example.com");
	});
}

В метод AddHsts() передается функция, которая в качестве параметра принимает объект HstsOptions. Этот объект имеет следующие свойства:

  • Preload: устанавливает параметр preload

  • MaxAge: устанавливает параметр max-age

  • IncludeSubDomains: устанавливает параметр includeSubDomains

  • ExcludedHosts: добавляет список доменов, которые надо исключить из действия заголовка

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850