Поделиться через


ПО промежуточного слоя: ПО промежуточного слоя перенаправления HTTPS создает исключение для неоднозначных портов HTTPS

В ASP.NET Core 6.0 ПО промежуточного слоя перенаправления HTTPS вызывает исключение типа InvalidOperationException при обнаружении нескольких портов HTTPS в конфигурации сервера. Сообщение исключения содержит текст "Не удается определить HTTPS порт от IServerAddressesFeature, найдено несколько значений. Задайте требуемый порт явно в HttpsRedirectionOptions.HttpsPort."

Обсуждение этого вопроса см. на странице GitHub dotnet/aspnetcore#29222.

Представленные версии

ASP.NET Core 6.0

Старое поведение

Если ПО промежуточного слоя перенаправления HTTPS не настроено явно с помощью порта, во время первого запроса выполняется поиск IServerAddressesFeature, чтобы определить HTTPS-порт, на который должно выполняться перенаправление.

Если нет HTTPS-портов или нескольких отдельных портов, то неясно, какой порт следует использовать. ПО промежуточного слоя регистрирует предупреждение и отключается. HTTP-запросы обрабатываются обычным образом.

Новое поведение

Если ПО промежуточного слоя перенаправления HTTPS не настроено явно с помощью порта, во время первого запроса выполняется поиск IServerAddressesFeature, чтобы определить HTTPS-порт, на который должно выполняться перенаправление.

Если HTTPS-порты отсутствуют, то ПО промежуточного слоя по-прежнему регистрирует предупреждение и отключается. HTTP-запросы обрабатываются обычным образом. Это поведение поддерживает следующее:

  • Сценарии разработки без протокола HTTPS.
  • Сценарии размещения, в которых работа протокола TLS завершается до достижения сервера.

При наличии нескольких разных портов неясно, какой порт следует использовать. ПО промежуточного слоя создает исключение и обработка HTTP-запроса завершается сбоем.

Причина изменения

Это изменение предотвращает возможность обслуживания потенциально конфиденциальных данных через незашифрованные HTTP-соединения, если известно, что протокол HTTPS доступен.

Чтобы включить перенаправление HTTPS, если на сервере имеется несколько HTTPS-портов, в конфигурации необходимо указать один порт. Дополнительные сведения см. в разделе Конфигурация портов.

Если ПО промежуточного слоя перенаправления HTTPS в приложении не требуется, удалите UseHttpsRedirection из Startup.cs.

Если необходимо динамически выбрать правильный HTTPS-порт, оставьте отзыв в статье на сайте GitHub dotnet/aspnetcore#21291.

Затронутые API

HttpsPolicyBuilderExtensions.UseHttpsRedirection