如何使用CloudFront为单个EC2实例使用Amazon Certificate Manager安装SSL证书?

时间:2016-03-22 08:52:35

标签: amazon-web-services amazon-ec2 ssl-certificate amazon-cloudfront

我正在使用Amazon EC2实例来托管我的Web应用程序。 EC2实例位于亚太地区。我想使用Amazon Certificate Manager的SSL证书。

对于上述场景,我必须选择Elastic Load Balancing选项或CloudFront。

由于我的实例位于亚太地区,我无法使用Elastic Load Balancing,因为负载均衡仅适用于美国东部(弗吉尼亚北部)地区的实例。

另一种选择是去CloudFront。如果我使用Amazon S3存储桶托管我的Web应用程序,CloudFront选项会更容易。但我正在使用EC2实例。

我要求并在美国东部(弗吉尼亚北部)地区获得ACM证书。

我继续使用CloudFront,并在原始路径的原始路径中输入了我的域名(example.com);我给出了应用程序目录(/ application)的位置,并填写了http和https端口。

部署CloudFront分配时,我只能看到Web应用程序的默认自签名证书,而不是ACM证书。

欢迎您提出意见和建议以解决此问题。谢谢。

3 个答案:

答案 0 :(得分:2)

  

我继续使用CloudFront,并在原始字段中输入了我的域名(example.com),

这是不正确的。原点需要是CloudFront可用于联系EC2实例的主机名。它不能是您的域名,因为一旦您完成此设置,您的域名将直接指向CloudFront,因此CloudFront无法使用它来访问该实例。

在这里,使用您在控制台中找到的实例的公共DNS主机名。看起来像是ec2-x-x-x-x.aws-region.compute.amazonaws.com。

  原点路径中的

;我给出了应用程序目录(/ application)的位置,

这也是不正确的。原始路径应留空。原始路径是您希望CloudFront prepend 到每个请求的字符串。如果您将其设置为/foo并且浏览器请求/bar,那么您的网络服务器将看到请求进入页面/foo/bar。可能不是你想要的。

  

并填写http和https端口。

在这里,您需要将原始协议策略设置为仅HTTP。除非您的服务器上的证书有效且未自签名,否则CloudFront不会使用HTTPS与您的服务器建立后端连接。浏览器和CloudFront之间的连接仍然可以是HTTPS,但如果实例上没有有效证书,CloudFront将拒绝在背面建立HTTPS连接。

此外,在缓存行为下,您需要将CloudFront配置为将所有请求标头转发到源服务器(这也禁用缓存,因此您可能不需要这样)或者至少需要将{{1列入白名单标头,以便您的源服务器识别请求。添加您需要查看的任何其他标头,例如Host:

如果需要,启用查询字符串转发。否则,CloudFront将剥离Referer,您的服务器将永远不会看到它们。

如果您的网站使用Cookie,请配置您需要CloudFront转发或转发所有Cookie的Cookie。

这应该配置您的CloudFront分配,但尚未在您的网站上生效。

  

部署CloudFront分配时,

这仅表示CloudFront已将您的设置部署到全球所有边缘位置,并且准备好用于流量,而不是它实际上将接收任何。

  

我只能看到Web应用程序的默认自签名证书,而不是ACM证书。

是的,因为您实际上没有将“example.com”的DNS更改为指向CloudFront而不是Web服务器。

分发准备就绪后,您需要向其发送流量。在Route 53中,找到您站点的A记录,该记录将在框中显示EC2实例的IP地址,并且“别名”单选按钮设置为“否”。将其更改为“是”,然后从显示的别名目标列表中选择CloudFront分配。保存更改。

现在......在旧DNS条目的生存时间(TTL)计时器到期后,关闭浏览器(所有浏览器窗口),闭上眼睛,交叉手指,睁开眼睛,打开您的浏览器,并点击您的网站。

...应通过CloudFront与ACM证书一起提供。

这可能听起来很复杂,但应该是你可以在很短的时间内完成这一切的事情。

答案 1 :(得分:1)

Elastic Load Balancer适用于所有地区。它只在美国东部可用的假设是错误的。看看吧,也许这就解决了你的问题。

关于SSL终止,您可以在ELB上启用该服务。

如果在单个节点中,您可以在Web服务器本身上进行SSL终止,这是一种更便宜的解决方案。

答案 2 :(得分:0)

首先,非常感谢你花时间帮我查询。我继续你的建议。

'此外,在缓存行为下,您需要将CloudFront配置为将所有请求标头转发到源服务器(这也会禁用缓存,因此您可能不需要这样)或者您至少需要白名单Host:标头,以便您的源服务器识别该请求。添加您需要查看的任何其他标头,例如Referer。'

通过将主机列入白名单,我不知道您的意思。在白名单框下,我有什么价值?

由于我不确定将标题列入白名单,因此我继续允许所有标题。我转发了所有的cookies。

在原始设置中,我不知道在标题名称和标题值中给出了什么。所以,我将标题名称命名为“header1”,将值作为我的域名'www(。)example(。)com'。

我已根据您的建议在Route 53中进行了DNS更改。

现在当我点击www(。)example(。)com时,我能够看到https://www.example(.)com有效的ACM证书。

但是,当我尝试访问我的应用程序https://www(.)example(.)com/application时,该网页正在导航到https://ec2-x-x-x-x.ap-southeast-1.compute.amazonaws.com/application/,并且它再次显示自签名证书。

我猜测Amazon Route 53中的DNS配置存在一些问题。您能否告诉我我必须做哪些更改,以便在我点击应用程序时可以看到有效的证书?

另外,当我点击我的应用程序时,我的URL正在更改为显示ec2-x-x-x-x而不是我的域名?你能告诉我如何纠正这个问题吗?

非常感谢你。