Перенаправление HTTP на HTTPS за балансировщиком нагрузки - PullRequest
0 голосов
/ 13 февраля 2019

Я перемещаю приложение ASP.NET Core в AWS Beanstalk, и у меня возникает проблема с принудительным использованием HTTPS для всех запросов.Полезная ошибка из журналов:

Не удалось определить порт https для перенаправления.

Согласно документам о принудительном применении HTTPS:

Если запросы перенаправляются в конфигурации обратного прокси-сервера, используйте промежуточное программное обеспечение «Перенаправленные заголовки» перед вызовом промежуточного программного обеспечения перенаправления HTTPS.Промежуточное программное обеспечение Forwarded Headers обновляет Request.Scheme, используя заголовок X-Forwarded-Proto

Исходя из моих настроек, выглядит корректно:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
    // aws ssl termination
    app.UseForwardedHeaders(new ForwardedHeadersOptions() {
        ForwardedHeaders = ForwardedHeaders.XForwardedProto
    });

    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    } else {
        app.UseExceptionHandler("/error/500");
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    // lots of other stuff removed for brevity
}

Балансировщик нагрузкипринимает запросы по HTTP (80) и HTTPS (443), а приложение настроено в IIS так, чтобы принимать запросы только по HTTP (80).Это и сообщение об ошибке делают его похожим на объявление , которое они сделали, но на основании документов я бы ожидал, что промежуточное ПО для прямых заголовков решит проблему.

Обновление

Если вместо использования UseHttpsRedirection я переключаюсь на использование промежуточного программного обеспечения RequireHttpsAttribute и AddRedirectToHttps, перенаправления работают правильно.Это просто промежуточное программное обеспечение UseHttpsRedirection, с которым я не могу работать.

1 Ответ

0 голосов
/ 16 февраля 2019

Хорошо, я суммирую комментарии:

Мой балансировщик нагрузки не выполняет перенаправление HTTPS, поэтому я думаю, что мне нужно промежуточное программное обеспечение.Разве я неправильно понимаю?

Итак, вы отправляете HTTP-запрос на прокси-сервер, который перенаправляется в ваше приложение, и затем вы получаете эту ошибку?

Это потому, что X-Forwarded-Proto заголовки имеют значение http, а промежуточное ПО Https Redirection не распознает его как безопасный протокол и попытается перенаправить.

Согласно документации , конфигурация https необходима для UseHttpsRedirection:

Для промежуточного программного обеспечения должен быть доступен порт для перенаправления небезопасного запроса на HTTPS.Если порт недоступен:

  • Перенаправление на HTTPS не происходит.
  • Промежуточное программное обеспечение регистрирует предупреждение «Не удалось определить порт https для перенаправления».

HTTPS-запросы (к прокси-серверу) на прокси-сервере должны тогда работать, поскольку заголовок X-Forwarded-Proto установлен на https, а промежуточное ПО перенаправления должно его пропустить.

В этом случае вам также необходимо настроить https в приложении (так как оно требуется для промежуточного программного обеспечения).Это может быть самозаверяющий сертификат, в конфигурации обратного прокси-сервера это 443 в приложении ASP.NET Core никогда не должно попасть.Вам даже не нужно выставлять порт (при использовании Docker).

Либо обработайте перенаправление https на самом обратном прокси-сервере.Это лучший подход, так как запросы никогда не попадут в ваше приложение, если только его https.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...