3

我正在尝试使用我的 ec2 实例设置云端。该域位于dreamhost,并且我添加了一条指向云端URL 的CNAME 记录。

我在我的 EC2 实例上使用 Lets Encrypt。如果我使用我的弹性 IP 并将其设置为 Dreamhost 上的 A 记录,它可以正常转发并且一切正常。如果我将 CNAME 记录指向云端 url,我会收到 502 错误。

按照此处的故障排除指南,我使用在线服务检查了我的 SSL 证书,它表明一切正常。

我错过了什么?必须将云端 URL 添加到我的证书中还是什么?

此外,我将分发版的 SSL 证书指向托管在 AWS Certificate Manager 中的证书,我认为该证书最终指向我的来源。我将证书指向我的 url 并添加了 CNAME 记录以验证所有权,所有这些似乎都工作正常。

更新:

我将我的 ec2 公共 url 插入在线 ssl 检查器,得到以下结果。也许这可能是问题的一部分?如果我输入我的弹性 IP,我会得到相同的结果。看起来这可能是罪魁祸首,但我不知道下一步是什么。回到谷歌搜索..

在此处输入图像描述

更新 2:

从我正在阅读的内容来看,我需要确保在我的 ec2 实例上安装了中间证书。我还了解到,在 Apache 2.4 中,fullchain.pem 文件代替了旧的 cert.pem 文件作为SSLCertificateFile.

我修改了 /etc/httpd/conf/httpd-le-ssl.conf 的内容,如下所示:

   <VirtualHost *:443>
      DocumentRoot "/var/www/html"
      ServerName "test.example.com"
      ServerAlias "test.example.com"
      Include /etc/letsencrypt/options-ssl-apache.conf
      SSLCertificateFile /etc/letsencrypt/live/test.example.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/test.example.com/privkey.pem
   </VirtualHost>

更改并重新启动 httpd 服务后,我的 url 上仍然出现错误。当我将 test.example.com 插入 SSL 检查器时,它会显示:

在此处输入图像描述

请记住,我发布的第一个屏幕截图使用的是我的弹性 IP,而不是我的 test.example.com 网址,因此它们并没有真正的可比性。不幸的是,在我进行更改之前,我没有 test.example.com 的截图,但我仍然收到 502 错误,所以它显然没有修复它。

更新 3:

当我导航到 test.example.com 时,看起来我的响应标题正在显示server: CloudFront,所以这是朝着正确方向迈出的一步。我以前完全没有得到。

更新 4:

我下载了 openssl 并能够获得以下信息。奇怪的是证书链甚至没有显示让加密作为证书的来源。

我最初使用 test.example.com 使用letsencrypt 证书设置我的EC2 实例。然后,当我创建 cloudfront dstribution 时,我使用证书管理器创建了一个指向我的 test.example.com 的证书,我现在想知道我是否以某种方式配置了错误,因为 openssl 输出只显示了一个亚马逊证书。我对证书管理器和 let encrypt cert 之间的交互感到困惑,它们似乎都指向同一个 url。啊。

我想我将不得不设置一个弹性负载均衡器并在 ELB 中使用来自 ACM 的证书。然后我想我不再需要让我们在 EC2 实例上加密证书了吗?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

2

如果您使用@Kannaiyan 指出的第二种方法,则无需将域名移动到 AWS。只需创建一个托管区域并将该区域中生成的 NS 记录复制到您的 DNS 提供商。然后,您可以轻松地将您的域名(包括顶级域)连接到 Cloudfront 发行版。

你可以在这里查看我的答案

于 2019-07-12T14:26:20.407 回答
-1

如果您想将自定义 SSL 与专用 IP 一起使用,AWS 将每月向您收取 600 美元。CloudFront 将在边缘提供专用 IP 地址,并采用您的 SSL 并使用该 IP 地址提供服务。

您还可以将自定义 SSL 导入您的 AWS 证书管理器,然后可用于将其分配给 CloudFront 端点。这种方法的唯一缺点是,您需要在证书更新期间再次更新 SSL。

其他替代品,

与第三方 DNS 提供商合作的步骤。

  1. 使用您的 DNS 提供商创建 CNAME 记录。
  2. 使用 AWS 证书管理器创建 AWS 安全证书,这可能需要使用 CNAME 或电子邮件地址进行域验证。这是免费的。
  3. 将 CNAME 记录添加到您的 CloudFront 分配。
  4. 收到证书后,将证书分配给 CloudFront 终端节点

将有一个额外的往返来查询 DNS 以解析为 IP。

CNAME(解析)--> CloudFront 主机 DNS 名称(something.cloudfront.net)--> 解析为 IP。

或者,(也是最好的方法

如果您将 DNS 移动到 Route 53,您可以将 CloudFront 分配给一个分配,这将在单个 DNS 请求中解析您的服务域。

通过上述设置,我发现不需要Lets EncryptEC2 证书。

可以从此处找到有关 CloudFront 上 AWS 的自定义 SSL 证书的更多信息。

希望能帮助到你。

编辑:

验证 SSL:

  1. 将您的云端源指向 S3 存储桶。
  2. 验证 cloudfront url 在使用对象连接到 S3 存储桶时是否正常工作。
  3. 使用自定义域 URL 进行验证以确保自定义 SSL 证书有效。
  4. 现在将您的源更改为 EC2 服务器。
  5. 确保您记录请求和响应以进行调试。
  6. 再次验证您的自定义域 URL。
  7. 如果您收到 5XX,请检查来自您的 EC2 服务器的响应。
于 2018-11-04T22:03:39.760 回答