ПО промежуточного слоя: ПО промежуточного слоя перенаправления 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.