具有 SSL 证书的 Amazon 负载均衡器

具有 SSL 证书的 Amazon 负载均衡器

我有一个在 AWS EC2 实例上运行的 Web 服务器。为了在我的自定义域(准确地说是子域)上支持 https,我使用 Amazon 证书管理器创建了一个 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 指南,但似乎缺少了一些东西。一旦我设置了负载平衡器,证书就会被标记为“正在使用”,所以这是有一些效果,但还不够。

我究竟做错了什么?

答案1

您的问题是sub.foo.com指向您的 EC2 实例,而不是您的负载均衡器。

当您 curl 时http://sub.foo.com:8080,您将访问 EC2 实例上的端口 8080。相反,您想要的是访问https://sub.foo.com负载均衡器上的端口(隐含端口 443)。

因此,您需要更改 DNS 以将sub.foo.com其作为 CNAME 指向您的负载均衡器。

进行此更改后,您需要等待 DNS 更改超过其之前的生存时间。在等待期间,您可以进行临时hosts文件更改来测试它。

相关内容