【问题标题】:AWS SSL certificate with Elastic Beanstalk: HTTPS site not reachable带有 Elastic Beanstalk 的 AWS SSL 证书:无法访问 HTTPS 站点
【发布时间】:2017-12-13 12:13:58
【问题描述】:

当我将 AWS 证书与我的 Elastic Beanstalk 应用程序关联并使用 https 访问域时,我收到“无法访问此站点,mydomain.com 拒绝连接。”我可以使用 http 访问该网站。

我使用 AWS 的 ACM 创建了一个安全证书。我将我的域名 example.com 以及作为子域的其他名称添加到证书中。在我的应用程序环境“负载平衡”部分中,我进行了设置:

我为我的环境设置了名为 awseb-e-abc123-stack-* 的 SecurityGroup,如下所示:

还有一个名为awseb-e-abc123-stack-AWSEBLoadBalancerSecurityGroup-*的安全组,如下。它与上面的组有相同的名称标签,与我的环境名称相同:

不过,“AWSEBLoadBalancerSecurityGroup”安全组的条目似乎没有任何作用,因为删除所有条目仍然允许 HTTP 流量工作。

.elasticbeanstalk\securelistener.config,我有以下内容

option_settings:
  aws:elb:listener:443:
    SSLCertificateId: <my certificate's ARN>
    ListenerProtocol: HTTPS
    InstancePort: 80

不过,如果我在这个文件中添加语法错误,部署仍然成功。

这是curl -vL https://&lt;my domain&gt;的输出:

* Rebuilt URL to: https://<my domain>/
*   Trying <my elastic IP>...
* connect to <my elastic IP> port 443 failed: Connection refused
* Failed to connect to <my domain> port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to <my domain> port 443: Connection refused

我使用单独的域名注册器来设置我的域名,并设置我的域的 DNS A 记录 IP 地址等于我的弹性 IP。

[编辑]

我在上面提到过,更改负载均衡器安全组的规则没有任何作用。这是因为我的 EC2 实例的安全组指向实例的安全组,而不是负载均衡器的安全组。当我将 EC2 的安全组指向负载均衡器的安全组时,就会执行安全组的规则。我通过从负载均衡器安全组中删除所有规则来验证这一点,并看到没有接受任何请求。但是,如果我将 HTTP 和 HTTPS 规则添加回负载均衡器安全组,但从实例安全组中删除所有规则,则所有 HTTP 请求都会通过。这不是预期的行为,因为负载均衡器应该将流量转发到实例。似乎正在发生的事情是 (1) 实例和负载均衡器安全组与实例和负载均衡器完全不相关,并且 (2) 没有流量流向负载均衡器。

我还有什么遗漏的吗?

[编辑 2]

我误读了 gkrizek 的评论。如果我使用负载均衡器的公共 DNS,我可以使用 HTTP 或 HTTPS 进行连接。我可以使用 telnet 连接到这两个版本。因此,我没有创建将 testdomain.com 设置为我的弹性 IP 的 A 记录,而是为负载均衡器创建了一个 sub.testdomain.com CNAME 记录集。现在我可以浏览到http://sub.testdomain.comhttps://sub.testdoamin.com。两个问题:

  • 是否可以在 CNAME 记录中使用负载平衡器的公共 DNS?我不能使用 *.elasticbeanstalk.com 网址,因为它可能会改变,所以我想知道这里是否也适用同样的情况
  • 如何保护https://testdomain.com(无子域)。好像用这种方法,不可能有https://testdomain.com,因为我不能用域名创建A记录。

【问题讨论】:

  • 您是否在负载均衡器处终止 https,并继续使用 http 请求?当你发出像curl -vL --insecure $url 这样的 curl 请求时会发生什么?
  • 默认情况下 AWS 不是在负载均衡器上终止 HTTPS 吗?我如何确定是否是这种情况?
  • 我不确定是否有默认值(如果有可能会终止)。您可以通过确保流向实例的流量未加密(即实例可以理解它正在接收的内容)或通过检查负载均衡器是否以“http”而不是“https”向实例发送信息来进行检查.
  • 如何检查到实例的流量是否未加密?
  • 您是否尝试在浏览器中加载负载均衡器的 DNS 名称?另外,您可以尝试在端口 443 上远程登录到负载均衡器的 DNS 吗?这至少会从等式中消除您的自定义域/证书的 DNS 问题。

标签: amazon-web-services ssl amazon-elastic-beanstalk aws-security-group amazon-acm


【解决方案1】:

问题是您必须使用您的域创建 CNAME 记录并使用负载平衡器 DNS 名称作为地址。如果您使用弹性 IP,请求将不会到达负载均衡器。

回答我最后的问题:

  • AWS says这没关系
  • 您不能直接执行此操作,因为 AWS 不允许您将弹性 IP 分配给负载均衡器。您可以做的是将 testdomain.com 重定向到 https://www.testdomain.com 的 URL 记录

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 2016-09-03
    • 2019-10-01
    • 2020-01-24
    • 2020-12-25
    • 2021-12-24
    • 2014-11-15
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多