簡體   English   中英

帶有負載均衡器和證書管理器的 EC2 實例上的 WSS 套接字

[英]WSS Socket on EC2 instance with Load Balancer and Certificate Manager

我正在嘗試設置一個解決方案,其中包括一個運行 NodeJS 的 Apache 的 EC2 實例。 我已經成功地創建了一個有效的網絡服務器實例,其中包含來自證書管理器的公共 SSL 證書,該證書在端口 80 和 443 上訪問。該服務器應該能夠連接到我的另一個實例,但由於某種原因,我一直遇到死胡同和我懷疑解決方案是不可能的......

我已經使用 Let's Encrypt 證書構建了一個工作設置,但我希望盡可能多地保留在 AWS 中。

問題:在 LE 解決方案中,我可以訪問服務器上的 local.pem 文件。 我可以在服務器設置文件中包含 LE 證書的本地路徑,如下所示:

...

var options = {
    key: fs.readFileSync("/etc/letsencrypt/live/example.com/privkey.pem"),
    cert: fs.readFileSync("/etc/letsencrypt/live/example.com/fullchain.pem")
};

var https   = require('https').Server(options, app);

...

但是當我使用 AWS Certificate Manager 的公共證書時,我不確定如何解決這個問題?

我的解決方案(不起作用):我不是 SSL 向導,所以我可能會在這里嘗試做一些不可能的事情。 我嘗試使用 OpenSSL 創建本地證書,但將負載均衡器和證書管理器證書保留在域中。

...

var options = {
    key: fs.readFileSync("/home/ec2-user/server-key.pem"),
    cert: fs.readFileSync("/home/ec2-user/server-cert.pem"),
};

var https   = require('https').Server(options, app);

...

當我嘗試使用 url: https://live.example.com:3000連接到節點/套接字服務器時,此解決方案返回以下錯誤消息:

WebSocket connection to 'wss://live.example.com:3000/socket.io/?EIO=4&transport=websocket' failed: Error in connection establishment: net::ERR_CERT_COMMON_NAME_INVALID

所以我想我的解決方案在域上的證書管理器證書和服務器上的 OpenSSL 證書是不可能的,或者問題可以在其他地方找到?

請告訴我:-)

正如評論中提到的,通過 AWS Certificate Manager 創建的證書只能用於某些 AWS 服務,例如 Elastic Load Balancer,不能用於自我管理的 web 服務器。 您可以做的是使用證書管理器證書並將其放在負載均衡器上,而您的 Apache/Node 服務器位於目標組中的負載均衡器后面。 公共互聯網上的所有連接都是 HTTPS,但負載均衡器和您的應用服務器之間的連接(通過 AWS 的內部網絡)將是普通的 HTTP。

從客戶端到 Elastic Load Balancer 的 HTTPS 連接以及從負載均衡器到 EC2 實例的 HTTP 連接示意圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM