Назад | Перейти на главную страницу

Как я могу заставить свой ELB подключаться через SSL к приложению, работающему на настраиваемом порту?

Привет - я новичок в использовании SSL / HTTPS, поэтому извиняюсь, если моя терминология / понимание здесь ограничены.

Я запускаю приложение NodeJS, которое является прокси-сервером для нескольких других серверов (это простой балансировщик нагрузки, следующий за кодом в этот статья).

Приложение Node работает через порт 7080. У меня есть AWS Elastic Load Balancer, который прослушивает порт 80 и перенаправляет запросы (через TCP) в порт 7080, что все работает нормально.

Я пытался добавить поддержку SSL и создал сертификат Let's Encrypt для своего домена (который указывает на конечную точку ELB). Я загрузил сертификат в AWS и добавил прослушиватель SSL с сертификатом, который также пересылает в TCP 7080. Это не работает - запросы просто истекли.

В инструкциях к приложению Node, которым я следую, предлагается настроить приложение с помощью файлов сертификатов SSL и передать эти настройки для создаваемого прокси-сервера. Я тоже пробовал это, но имел ошибки сертификата, которые, как я предполагаю, были вызваны тем, что я загружал необработанный URL-адрес экземпляра EC2, а не домен балансировщика нагрузки (на который указывают сертификаты). Я надеялся, что, завершив запрос SSL на уровне балансировщика нагрузки, мне не нужно будет настраивать базовое приложение Node для работы на самом SSL. Я неправильно это понял?

Как я сказал выше, я новичок в этом и все еще понимаю, что происходит. Любые подсказки будут с благодарностью получены.

Ага, решил сам. В группе безопасности балансировщика нагрузки не был открыт порт 443 (в экземпляре EC2 он был избыточно).

Прежде всего, вы правы, говоря, что, завершая SSL на AWS ELB, вам не нужно беспокоиться о настройке SSL в вашем приложении NodeJS. Это шаблон, который я обычно использую - вам не нужно настраивать приложение узла для чего-либо, связанного с SSL.

Во-вторых, в рамках AWS я настоятельно рекомендую вам использовать диспетчер сертификатов Amazon для создания своих сертификатов - при этом вам не нужно беспокоиться о продлении, и на самом деле его намного проще (и при этом бесплатно) настроить и поддерживать, чем попытка использовать Let's encrypt (что отлично, но лучше подходит для приложений за пределами AWS). Опять же, я использую сертификаты ACM везде, где могу - на производстве.

Теперь попытаемся решить вашу проблему.

Предполагая, что это работает должным образом на HTTP, должно быть просто заставить его работать на HTTPS.

Первое, что я бы проверил:

  • убедитесь, что на вашем балансировщике нагрузки нет группы безопасности, которая блокирует доступ к порту 443 (где я предполагаю, что ваш прослушиватель HTTPS прослушивает). Связанная группа безопасности на ELB должна будет разрешить доступ как к порту 80, так и к порту 443.
  • убедитесь, что вы не получаете неожиданное перенаправление на что-то, что недоступно с помощью инструментов разработчика вашего браузера, возможно, соединение работает так, как ожидалось - curl или openssl s_client может быть полезно для дальнейшей отладки