Как включить безопасное соединение через https между AWS Балансировщиком нагрузки и узлами EC2? - PullRequest
0 голосов
/ 22 января 2020

Было установлено в AWS балансировщик нагрузки с 2 слушателями следующим образом:

  • HTTP:80 - в целевую группу (2 экземпляра EC2)
  • HTTPS:443 - пересылка ELBSecurityPolicy в одну и ту же целевую группу (2 экземпляра EC2)

Экземпляры EC2 запускают tomcat 7 для приложения сервлета.

Проблема заключается в том, что при нажатии балансировщик нагрузки с запросом https перенаправляет его на один из двух экземпляров EC2 с простым запросом http, затем перенаправляет обратно на https.

Я вижу перенаправления с расширением chrome, и они выглядит следующим образом:

Таким образом, реферер не будет работать, он пуст, из-за простого внутреннего запроса http. Разве этого можно избежать в конфигурации AWS?

Я пытался в приложении сервлета без радости, но я думаю, что-то может быть сделано в AWS.

Как можно следует избегать внутренних перенаправлений http AWS на узлы EC2?

Я также пытался в приложении сервлета в web.xml:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>secured page</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

Но он не будет работать, так как он будет смотреть на порт 8443 по умолчанию, но сервер прослушивает 8080

1 Ответ

0 голосов
/ 22 января 2020

С учетом описанного вами поведения:

https://load-balancer/home -> click to another page
http://load-balancer/anotherpage
https://load-balancer/anotherpage

Похоже, что ссылка на странице - это просто ссылка http вместо ссылки https. Вам нужно исправить код, который строит ссылку.

Перенаправления, которые вы видите в Chrome, по-видимому, не "перенаправляют" на серверы EC2, как вы описываете. Если бы это происходило, имя домена запросов изменилось бы, но вы говорите, что они всегда будут https://load-balancer или http://load-balancer.


РЕДАКТИРОВАТЬ:

Чтобы Tomcat знал, что исходный HTTP-запрос был защищен через SSL / TLS до балансировщика нагрузки, и, таким образом, для создания новых ссылок с https://, вам необходимо добавьте следующее в файл конфигурации conf/server.xml Tomcat:

   <Valve className="org.apache.catalina.valves.RemoteIpValve"
           remoteIpHeader="x-forwarded-for"
           remoteIpProxiesHeader="x-forwarded-by"
           protocolHeader="x-forwarded-proto"
    />

Обратите внимание, что вы не защищаете соединение через https между балансировщиком нагрузки и серверами EC2 ( как вы указали в заголовке вопроса) с учетом описанной вами конфигурации. HTTPS останавливается на балансировщике нагрузки, и связь между балансировщиком нагрузки и серверами EC2 происходит по HTTP.

...