如何将云端之间的 SSL 设置为具有 EC2 自定义来源的反向代理缓存?

How to set SSL between cloudfront as a reverse proxy cache with an EC2 custom origin?

我的域名指向 cloudfront,它又使用自定义来源引用我的 EC2 实例。在这种情况下,它是来自 EC2 的 public dns 名称,如 xxxxx.us-west-2.compute.amazonaws.com。这使其表现得像一个反向代理。

我有一个需要用户信息的表格,所以我想设置 SSL。因为我的主域指向云端,

当像反向代理缓存一样使用 CF 并且 EC2 实例是自定义域时,如何设置 cloudfront 和 EC2 实例之间的关系。

我会这样做吗:

  1. 为我的来源创建一个子域,例如 "origin.mydomain.com"
  2. 获取 origin.mydomain.com
  3. 的 SSL 证书
  4. 将origin.mydomain.com设置为cloudfront中的origin,而不是amazon创建的实例域。 (不是 xxxxx.us-west-2.compute.amazonaws.com)

编辑:为了清楚起见,修改了标题和一些 body。

是的,正是这个想法。

您错过的步骤是您还需要主域的 ssl 证书,您将在 CloudFront 分发版中"install"。

所以您需要两个证书(或一个多域——有时称为 SAN 或 UCC——或者您可以使用通配符证书),因为——正如您正确指出的那样——CloudFront 是一个反向代理(不是就在这种情况下——这正是 CloudFront 的本质,一个缓存反向代理)。

如果您只有源端的证书,CloudFront 与源端之间的流量将被加密,但浏览器与 CloudFront 之间的流量不会被加密。

在 CloudFront 方面,您可以购买一个,也可以从 AWS Certificate manager 免费获得证书。这些证书适用于 CloudFront 和 ELB,但不能直接安装在 EC2 上,因此如果您不使用 ELB,则需要在其他地方获得证书。

Gandi 将以 16 美元的价格向您出售 EC2 实例的简单证书,该证书在 CloudFront 后面运行。我与他们没有任何关系,但我提到这一点是因为我知道它适用于 CloudFront——我为此使用它们。 LetsEncrypt 和 StartSSL 将免费为您提供一个,但可以说涉及的工作要多一些。我假设如果安装在 CloudFront 后面的源上,这些应该可以工作,但这取决于那些 CA 被 CloudFront 信任库信任,这很可能是这种情况,但不一定保证。 CloudFront 将拒绝使用它无法识别的 CA 颁发的 SSL 证书连接到源(它 returns 502 错误,过去我在 CloudFront 背后的 StartSSL 证书上遇到过问题)...和这也意味着您不能在源上使用自签名证书。

您可以获得 SSL 证书并将其分配给您的 CF。有两种方法可以做到这一点:

  • 便宜的方法是使用他们新的(ish)证书管理器从 AWS 获得通配符 SSL;获得 SSL 后,转到您的 CF 发行版并简单地编辑您的 CF 发行版并启用 SSL

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html

http://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html

  • 更昂贵的方法是获得您自己的自定义 SSL 并将其与 CF 一起使用,但这将使您每月使用的每个 SSL 增加 600 美元的成本。该过程与上面的过程大致相同,不同之处在于您必须将 SSL 上传到 IAM,然后转到 CF 控制台并激活。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-procedures.html