本案例情境: 原本就有一個網站在EC2上運作,每年自行上傳更新的付費SSL憑證,想改用AWS Certificate Manager (ACM)頒發的免費憑證;網站DNS是透過Cloudflare管理。
除了免費外,AWS憑證會自動更新,不會有到期的問題。
根據AWS指南,公有ACM憑證可以安裝在連接到Nitro Enclave的Amazon EC2執行個體上,但不適用於其他Amazon EC2執行個體。本案例屬於後者,因此需要透過CloudFront連接EC2。
CloudFront是以流量計費,ELB以小時計費,前者適用於流量小的網站。
user => Cloudflare(DNS) => CloudFront(with SSL) => website
到ACM介面,右上角選取維吉尼亞州北部,然後請求憑證。
這很重要,免費憑證只能在維吉尼亞州北部,此區域與EC2所在地區無關。
接著選取請求公有憑證(實際上你也只有這個可以選)後下一步。
網域名稱> 你要申請憑證的網域 (www.example.com or aaa.example.com)
驗證方法> DNS驗證-建議 我自己習慣用這個方法,操作方法網路上很多教學,簡單快速
金鑰演算法> RSA 2048
請求並完成驗證之後,列出憑證的畫面就會長這樣:
如題--
首先會需要填寫來源網域,到你EC2執行個體的頁面找到公有IPv4 DNS,複製它並貼到CloudFront來源網域。
通訊協定選擇僅透過HTTP。
設定預設快取行為:
檢視器通訊協定政策> Redirect HTTP to HTTPS
快取索引鍵和來源請求> Cache policy and origin request policy (recommended)
快取政策> CachingDisabled
來源請求政策> AllViewer
其他我是沒改,請看下圖。
設定:
備用網域名稱(CNAME)>新增項目>輸入你剛申請SSL的網域
自訂SSL憑證>下拉式選單中會看到你在ACM申請的憑證
其他都不用改,完成後按「建立分佈」,剛建立完它會需要一陣子部署,
如果已經建置完成會顯示上次修改時間,不需要重新整理,它會自己更新。
前面案例情境有提到,我們原本是每年自行上傳更新的付費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>
回到CloudFront頁面,複製分佈網域名稱測試一下,現在這個連結應該可以連到你的網站了。
開啟Cloudflare的DNS頁面,將原本指向EC2執行個體公有IPv4地址的A紀錄,改成指向CloudFront分佈網域名稱的CNAME。
現在,你的網站就有AWS憑證囉!
以上是個人嘗試的紀錄,如有觀念錯誤歡迎討論指教,感恩!