首页 文章

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

提问于
浏览
-1

我正在使用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 回答

  • 2

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

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

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

  • 1

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

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

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

    在原始路径;我给出了应用程序目录(/ application)的位置,

    这也是不正确的 . 原始路径应留空 . 原始路径是您希望CloudFront预先添加到每个请求的字符串 . 如果将此项设置为 /foo 并且浏览器请求 /bar ,则您的Web服务器将看到请求进入页面 /foo/bar . 可能不是你想要的 .

    并填写http和https端口 .

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

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

    如果需要,启用查询字符串转发 . 否则,CloudFront将删除 ?your=query&strings=off_the_requests ,您的服务器将永远不会看到它们 .

    如果您的站点使用cookie,请配置您需要CloudFront转发或转发所有cookie的cookie .

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

    部署CloudFront分配时,

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

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

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

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

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

    ...应该通过CloudFront提供ACM证书 .

    这可能听起来很复杂,但应该是你可以在更短的时间内完成的事情带我把这一切都搞定了 .

  • 0

    首先,非常感谢您抽出宝贵时间并帮助我完成查询 . 我继续你的建议 .

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

    通过将主机列入白名单,我不知道你的意思 . 在白名单框下,我有什么 Value ?

    由于我不确定将 Headers 列入白名单,因此我继续允许所有 Headers . 我转发了所有的cookie .

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

    我已按照您的建议在Route 53中进行了DNS更改 .

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

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

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

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

    非常感谢 .

相关问题