Amazon-Web-Services

帶有 SSL 證書的 Amazon 負載均衡器

  • January 3, 2020

我有一個在 AWS EC2 實例上執行的 Web 伺服器。為了在我的自定義域(準確地說是子域)上支持 https,我使用 Amazon Certificate Manager 創建了一個 TLS 證書。我知道只有在我使用額外的 AWS 服務(例如負載均衡服務)時才會使用證書,所以我正在設置負載均衡器。

但我一定做錯了什麼。我在埠 443 上設置了一個偵聽器,該偵聽器路由到埠 8080 上的目標組(我的伺服器在埠 8080 上執行,所以我認為這兩個埠需要匹配)。

我的網站上有一個 404 處理程序,我正在嘗試訪問。所以,假設我的自定義域是 foo 並且證書是為 sub.foo.com 頒發的,那麼我正在嘗試訪問 sub.foo.com/bar 以獲得 404 響應。

當我通過 http 執行此操作時,它工作得很好:

$ curl http://sub.foo.com:8080/bar -v
*   Trying (...)...
* TCP_NODELAY set
* Connected to sub.foo.com (...) port 8080 (#0)
> GET /bar HTTP/1.1
> Host: sub.foo.com:8080
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 404 Not Found
< Content-Type: text/html; charset=utf-8
< Content-Length: 13
< Server: http-kit
< Date: Fri, 03 Jan 2020 17:03:36 GMT
< 
* Connection #0 to host sub.foo.com left intact
No such page.% 

但是當我通過 https 嘗試它時,它失敗了:

$ curl https://sub.foo.com/bar -v     
*   Trying (...)...
* TCP_NODELAY set
* Connection failed
* connect to (...) port 443 failed: Connection refused
* Failed to connect to sub.foo.com port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to sub.foo.com port 443: Connection refused

有趣的是,如果我嘗試直接通過 SSL 訪問埠 8080,則會發生不同的事情:

$ curl https://sub.foo.com:8080/bar -v
*   Trying (...)...
* TCP_NODELAY set
* Connected to sub.foo.com (...) port 8080 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: (...)
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
 CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to sub.foo.com:8080 
* stopped the pause stream!
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to sub.foo.com:8080

再說一次,這可能只是因為埠 8080 配置為通過 http 而不是 https 工作。

如您所知,這裡涉及到相當多的猜測。我一直在關注關於如何創建 https 偵聽器的 AWS 指南,但似乎遺漏了一些東西。一旦我設置了負載均衡器,證書就會被標記為“正在使用”,所以這會產生一些效果,但這還不夠。

我究竟做錯了什麼?

您的問題是sub.foo.com指向您的 EC2 實例,而不是您的負載均衡器。

當您 curl 時http://sub.foo.com:8080,您將訪問 EC2 實例上的埠 8080。相反,您想要的是https://sub.foo.com在負載均衡器上命中(隱含埠 443)。

因此,您需要更改 DNS 以sub.foo.com將 CNAME 指向您的負載均衡器。

進行此更改後,您需要等待 DNS 更改超過其之前的生存時間。在等待期間,您可以進行臨時hosts文件更改以對其進行測試。

引用自:https://serverfault.com/questions/997535