本案例情境: 原本就有一个网站在EC2上运作,每年自行上传更新的付费SSL凭证,想改用AWS Certificate Manager (ACM)颁发的免费凭证;网站DNS是透过Cloudflare管理。
为何使用AWS凭证?
除了免费外,AWS凭证会自动更新,不会有到期的问题。
为何要使用CloudFront?
根据AWS指南,公有ACM凭证可以安装在连接到Nitro Enclave的Amazon EC2执行个体上,但不适用于其他Amazon EC2执行个体。本案例属于后者,因此需要透过CloudFront连接EC2。
CloudFront与负载平衡器Amazon Elastic Load Balancer(ELB)差别?
CloudFront是以流量计费,ELB以小时计费,前者适用于流量小的网站。
架构
user => Cloudflare(DNS) => CloudFront(with SSL) => website
STEP1 透过ACM申请免费SSL凭证
到ACM介面,右上角选取维吉尼亚州北部,然后请求凭证。
这很重要,免费凭证只能在维吉尼亚州北部,此区域与EC2所在地区无关。
接着选取请求公有凭证(实际上你也只有这个可以选)后下一步。
网域名称> 你要申请凭证的网域 (www.example.com or aaa.example.com)
验证方法> DNS验证-建议 我自己习惯用这个方法,操作方法网路上很多教学,简单快速
金钥演算法> RSA 2048
请求并完成验证之后,列出凭证的画面就会长这样:
STEP2 建立CloudFront分布
如题--
首先会需要填写来源网域,到你EC2执行个体的页面找到公有IPv4 DNS,複製它并贴到CloudFront来源网域。
通讯协定选择仅透过HTTP。
设定预设快取行为:
检视器通讯协定政策> Redirect HTTP to HTTPS
快取索引键和来源请求> Cache policy and origin request policy (recommended)
快取政策> CachingDisabled
来源请求政策> AllViewer
其他我是没改,请看下图。
设定:
备用网域名称(CNAME)>新增项目>输入你刚申请SSL的网域
自订SSL凭证>下拉式选单中会看到你在ACM申请的凭证
其他都不用改,完成后按「建立分布」,刚建立完它会需要一阵子部署,
如果已经建置完成会显示上次修改时间,不需要重新整理,它会自己更新。
STEP3 移除原本的SSL凭证
前面案例情境有提到,我们原本是每年自行上传更新的付费SSL凭证,因此要先去移除它。
我是透过SSH登入root帐号修改EC2的conf文件,路径应该都会在/etc/httpd下面某个资料夹某个conf档案。
将有#的部分删除,或透过#注解掉。
<VirtualHost *:80> DocumentRoot /www/example.com ServerName example.com# Redirect permanent / https://example.com/</VirtualHost><VirtualHost *:443> DocumentRoot /www/example.com ServerName example.com# SSLEngine On# SSLCertificateFile 原本SSL档案路径# SSLCertificateKeyFile 原本SSL档案路径# SSLCertificateChainFile 原本SSL档案路径</VirtualHost>
STEP4 测试CloudFront分布连结
回到CloudFront页面,複製分布网域名称测试一下,现在这个连结应该可以连到你的网站了。
STEP5 更新DNS(Cloudflare)
开启Cloudflare的DNS页面,将原本指向EC2执行个体公有IPv4地址的A纪录,改成指向CloudFront分布网域名称的CNAME。
大功告成!!
现在,你的网站就有AWS凭证啰!
以上是个人尝试的纪录,如有观念错误欢迎讨论指教,感恩!