1

我在 aws 中托管一个域,并希望允许对其进行 https 请求。我已经完成了以下步骤。

  1. 向 ACM 请求证书,验证电子邮件并颁发。
  2. 创建了一个带有 http 和 https 侦听器的经典负载均衡器 (LB),这些侦听器通过 http(80) 转发到实例。
  3. 将证书附加到 LB 并添加运行网站的实例。
  4. 确保附加到实例和 LB 的安全组在入站规则中有 http(80) 和 https(443)。
  5. LB 和实例安全组的唯一出站规则是(所有流量 - 全部 - 全部 - 0.0.0.0/0)。

然后我等待实例“inService”并通过浏览其 DNS 并打开它来测试 LB。也打开了 http://mydomain.com,但是当我尝试 https://mydomain.com 时,我收到一条消息,指出浏览器无法访问服务器。
经过一番搜索,我添加了以下 2 条记录。

  1. 名称为“mydomain.com”且值为“LB domain.com”的记录。
  2. 名称为“www”且值为“mydomain.com”的 CNAME 记录。

我又试了一次,但得到了与上面相同的结果。最后我得到了一个答案,我应该在我的实例服务器中启用 https。

当我这样做并浏览时,我得到了一个“安全连接失败”,错误代码为“ SSL_ERROR_RX_RECORD_TOO_LONG ”。

看起来 LB 并没有终止对我的域的 https 请求。
知道我做错了什么!

更新:我删除了我创建的 A 记录,但是当我进行 DNS 查找时,我发现了一个指向我的弹性 ip 的 A 记录。虽然我有 CNAME 记录,但 DNS 查找显示我没有 CNAME 记录。

4

3 回答 3

2

好吧,这是一个愚蠢的错误。在我之前工作的人在godaddy中注册了域名,并使用godaddy上的A记录指向了实例。所以我在 route53 中添加的记录是没有意义的。所以我在godaddy 中创建了一个解析为ELB DNS 的CNAME 记录,现在一切正常。

对于那些可能陷入类似问题的人,我会尝试写一些建议。
首先,当您选择添加负载均衡器时,客户端不应直接访问您的实例。您应该将用户重定向到 ELB,而 ELB 将完成剩下的工作。如果您从其他地方而不是 AWS 获得 DNS,请按照此答案的第一段进行操作。否则,如果您在 AWS 中为您的域提供有效的托管区域,则在Route53中添加一条 A 记录。
在此步骤之后,如果 https 仍然无法正常工作。您可以检查对您的域的请求是否到达 ELB。您可以使用负载均衡器日志访问cloudwatch执行此操作. 它们都为您提供到达负载均衡器的请求。cloudwatch 使用起来更简单,但 log Access 为您提供了请求的更多详细信息。
如果请求未到达,则您添加的记录尚未传播,或者您没有将它们添加到正确的位置(就像我一样)。
如果请求确实到达了 ELB 但仍然存在问题,那么您可能错过了设置中的某些内容。确保您完成了问题中提到的 5 个步骤。在这种情况下,该视频将非常有帮助。
最后,值得一提的是,如果您使用来自 ACM 的证书,则无需对实例上运行的服务器进行任何更改即可使 https 正常工作,因为在这种情况下,ELB 位于您的实例前面并且可以正常工作为你。当然,您可以在 ELB 和实例之间建立 ssl,但这是另一回事。

于 2017-04-01T15:23:41.590 回答
0

只有当您在 /var/www/html/ 中创建内容时,InService 才会出现。所以我建议你在那里创建一个 index.html 文件,然后等待 1 分钟以查看 InService。之后,您必须将 CNAME 指向 elb“地址”,该地址在路由器 53 中必须为小写。但通常,它不会变得可见,因此请等待并不断刷新,直到路由器 53 中出现 elb 地址。我希望它会工作。

于 2017-04-01T07:57:53.173 回答
0

我想在这里添加我的案例。ECS 集群中返回错误,docker 容器通过 ECS 集群和负载均衡器暴露给外部世界。

我遇到了与主题中提到的完全相同的错误,

SSL_ERROR_RX_RECORD_TOO_LONG

但是我的 DNS 记录使用了 CNAME 条目(上面的评论中提到了 A),所以这部分是正确的。

可以将这个错误的排查分为2个阶段:1)-run docker container/s,不要使用http,请求docker容器的URL,该命令应该在运行docker容器的容器实例上执行:

curl localhost 或 curl localhost:

在我的情况下,这个阶段通过并且 curl 返回了一个 html 响应

2)检查您的应用程序负载均衡器是否可以处理 https 流量,您可以通过执行以下命令来做到这一点:

> openssl s_client -connect <你的 dns 主机名连接到你的负载均衡器>:443

就我而言,事实证明应用程序负载均衡器无法正确处理 ssl 并处理证书链

请在下面找到无法处理 https 流量的负载均衡器的命令输出示例:

CONNECTED(00000003)
140181833668512:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1594020928
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

为了解决第二个问题,我重新安装了一个应用程序负载均衡器,再次配置了 https 侦听器,从我的帐户中的可用证书列表中指向了一个证书,问题就得到了解决。

于 2020-07-06T08:12:20.767 回答