带负载均衡器的aws ssl - ELB实例https请求似乎没有被ELB

时间:2017-03-18 15:27:40

标签: amazon-web-services ssl amazon-ec2 https elastic-load-balancer

我在aws中托管域名,并希望允许https请求。我已经完成了以下步骤。

  1. 要求ACM颁发证书,验证电子邮件并发出。
  2. 创建了一个经典的负载均衡器(LB),其中包含http和https侦听器,可通过http(80)转发给实例。
  3. 将证书附加到LB并添加了运行该网站的实例。
  4. 确保附加到实例的安全组和LB在入站规则中具有http(80)和https(443)。
  5. LB和实例安全组的唯一出站规则是(All tr​​affic - All - All - 0.0.0.0/0)。
  6. 然后我等待实例" inService"并通过浏览到DNS来测试LB并打开它。还http://mydomain.com已经打开但是当我尝试https://mydomain.com时,我收到一条消息,说明浏览器无法访问服务器。
    经过一番搜索后,我添加了以下2条记录。

    1. 名称为" mydomain.com"的记录和价值" LB domain.com"。
    2. CNAME记录,名称为" www"和价值" mydomain.com"。
    3. 我再次尝试但得到了与上面相同的结果。 最后,我得到了一个答案,我应该在我的实例服务器中启用https。

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

SSL_ERROR_RX_RECORD_TOO_LONG

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

您可以将此错误的故障排除分为两个阶段: 1) -运行docker容器,请勿使用http,请求docker容器的URL, 该命令应在运行docker container的容器实例上执行:

curl本地主机 要么 curl本地主机:

在我来说,这个阶段过去了,curl返回了html响应

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

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

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

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

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侦听器,从列表中指向证书 帐户中可用证书的数量,问题已解决。