node.js - AWS Load Balancer,为 HTTPS 启用监听器并路由到 80

标签 node.js amazon-web-services ssl amazon-ec2 sails.js

我在两台运行带有 PM2 的 SailsJS 的服务器前面有一个 AWS LoadBalancer。 LB 运行良好,并将传入的 HTTP 请求路由到服务器,这是完美的。

现在,我需要添加对 HTTPS 的支持,所以我遵循了这个指南: AWS Create a Classic Load Balancer with an HTTPS Listener ,使用自行生成的 SSL 证书,并将此配置用于端口

LB Port 80 - Instance 80 
LB Port 443 - Instance 80

并且安全组打开了这些端口:

22, 
80, 
443

所以,如果我没理解错的话,LB 会在端口 443 上接收到 HTTPS 请求,并将其转发到实例的端口 80。当然,我的实例正在监听端口 80。

问题是,这行不通!我可以向 LB 发出 HTTP 请求,所有请求都完美地路由到 Sails 实例,响应也很完美。但是,如果我使用完全相同的 URL 但使用 HTTPS,则它不起作用并且我得到“ERR_SSL_PROTOCOL_ERROR”。

我做错了什么,我错过了什么?

谢谢!

编辑 1 如果我尝试 curl -v https://example.com,这就是我得到的结果

* Trying xx.xx.xx.xx...
* Connected to example.com (xx.xx.xx.xx) port 443 (#0)
* Unknown SSL protocol error in connection to example.com:-9838
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to mydomain.com:-9838

编辑 2

找到另一个线程 which suggested a different way of creating the certificate .所以我试了一下,但是现在AWS甚至不接受私钥和证书

Server Certificate not found for the key:    arn:aws:iam::111111111:server-certificate/CertificateMyName

编辑 3

好的,所以找到了更多关于为什么我 couldn't load the certificates to AWS 的信息在尝试了几次之后,我设法加载并使用了它。

在这些之后,它似乎可以正常工作(带有不是有效证书的警告和 bla、bla、bla,这是预期的)

* Trying XXX.XXX.XXX.XXX...
* Connected to example.com (XXX.XXX.XXX.XXX) port 443 (#0)
* SSL certificate problem: Invalid certificate chain
* Closing connection 0
curl: (60) SSL certificate problem: Invalid certificate chain

所以它似乎在工作,而且看起来,正如@MarkB 所建议的那样,证书是错误的。使用在 EDIT 2 上找到的信息,我创建了一个新的,并上传了它(使用 EDIT 3 的信息),它似乎可以正常工作。

我将执行更多测试以 100% 确保这有效,并会尽快报告。

最佳答案

好的,所以问题是错误生成的证书。我使用了我发现的第一种方法,但它不起作用,所以只需使用这些:

openssl genrsa -out client-key.pem 2048
openssl req -new -key client-key.pem -out client.csr
openssl x509 -req -in client.csr -signkey client-key.pem -out client-cert.pem

甚至在那之后,AWS 告诉我:

Server Certificate not found for the key:    arn:aws:iam::111111111:server-certificate/CertificateMyName

但是最后一个错误是错误的,即使有错误证书被添加到 ACM,我在我的 HTTPS 443 监听器中使用它,再次测试服务并且一切正常。因此,只需按照上述说明创建证书,将其导入 ACM,如果出现上述错误,请忽略它,您的证书将就位并可以使用。

希望这对其他人有帮助!

关于node.js - AWS Load Balancer,为 HTTPS 启用监听器并路由到 80,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398879/

相关文章:

ssl - javax.net.ssl.SSLHandshakeException : No available authentication scheme

apache - .htaccess 将敏感区域的 http 重定向到 https

javascript - 我如何使用nodejs同时创建两个目录

git - 将 Perl Docker 容器部署到 Elastic Beanstalk

node.js - 使用 Node.js 和 Socket.io 将更改推送到所有客户端

wordpress - 如何使用适用于 WordPress 的 lightsail 设置 AWS cloudfront?

ios - iOS 和 Android 的 AWS Pinpoint 推送通知传送问题

php - Apache 2.4.9 在启用 ssl 模块和设置 ssl 证书后失败

node.js - 使用Exceljs库读取XLSX文件数据

node.js - 如何从redis中的值中获取键并通过检查其值删除其他键?