Привет - я новичок в использовании 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.
Первое, что я бы проверил:
curl
или openssl s_client
может быть полезно для дальнейшей отладки