iT邦幫忙

0

Week19 - 用Let's Encrypt來為你的網站設定免費的SSL保護吧 - Auto-Renew篇 [Server的終局之戰系列]

本文章同時發佈於:


大家好,繼上篇Week18 - 用Let's Encrypt來為你的網站設定免費的SSL保護吧 - 實作篇實作Let's Encrypt取得憑證的方式後,但家有沒有發現,Let's Encrypt的憑證有效期限非常短只有三個月,如果每三個月就要手動換一次會很麻煩,所以Let's Encrypt有提供自動更新憑證的功能 - Auto-Renew。

我們這次將實作Auto-Renew配合AWS的CLI來更新憑證。

你需要準備

  1. AWS的EC2
  2. AWS的Certificate Manager:用來管理上傳的憑證
  3. AWS的AIM:新增權限,讓AWS CLI可以上傳憑證
  4. AWS CLI:用來上傳憑證

整體流程

驗證上由於多了一個Load Balancer,所以會複雜些。

上篇最大的不同,就是不再是直接將DNS指向EC2的Instance,而是指向Load Balancer。

並透過Load Balancer作分流導向EC2的驗證Instance,而Instance驗證完畢後會將憑證上傳至Load Balancer。最後設定Crontab來定時執行這些驗證,以自動化取得與更新憑證。

開始實作

首先,將Load Balancer的DNS name複製至DNS網站上,並設定CNAME紀錄

創建Target group,讓此Target group會把request導向Instance的3002 port,

將Target group掛載至Load Balancer,這邊即是設定當request網址為api.messfar.com,就將request導至剛剛所設的Target group


將Instance掛載至Target groupt


將request的導向設定完畢後,我們需要創建AIM來讓收到此request的Instance有能力透過AWS CLI來上傳憑證,所以我們這邊就到IAM頁面來創建此使用者

勾選程式設計方式存取

由於目前的情境不複雜,我們直接選取直接連接現有政策,並勾選AWSCertificateManagerFullAccess

以下我都沒有特別設定,直接一路點下一步


複製存取金鑰ID私密存取金鑰,稍後設定AWS CLI會使用到

接下來與上篇相同,我們連入此Instance然後透過CertBot驗證


驗證完畢後,我們設定AWS CLI Configure,並把剛剛複製的存取金鑰ID私密存取金鑰貼上,並把Load Balancer的區域也打上

接著我們就可以透過AWC CLI上傳憑證至AWS的Certificate Manager了

$ sudo ./copyCert.sh api.messfar.com ~/w3school-40-weeks/week19
$ ./uploadCert.sh

接著你會得到此憑證的ARN,就是此憑證在AWS的路徑,我們在設定定時更新時,需要將ARN打上,才會更新至此憑證

我們將copyCert.shrenewCert.sh設定至Crontab,讓自動更新可以定時執行

$ sudo vi /etc/crontab

copyCert.shrenewCert.sh後方的參數分別為

copyCert.sh <你的domain> <你的folder>
renewCert.sh <你的domain> <你的folder> <憑證的ARN>

以下是我的憑證的範例

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  0  23 *  *  * root       ~/w3school-40-weeks/week19/copyCert.sh api.messfar.com ~/w3school-40-weeks/week19
  1  23 *  *  * ec2-user   ~/w3school-40-weeks/week19/renewCert.sh api.messfar.com ~/w3school-40-weeks/week19/ arn:aws:acm:ap-northeast-1:397662572793:certificate/605b09e2-4c57-4c3d-852d-1fa70f08bfb4

把AWS的Certificate Manager掛載至Load Balancer上就可以了,撒花~



謝謝你的閱讀,也歡迎分享討論指證~

參考資料


尚未有邦友留言

立即登入留言