本文章同时发布于:
MediumiT邦帮忙大家好,继上篇Week18 - 用Let's Encrypt来为你的网站设定免费的SSL保护吧 - 实作篇实作Let's Encrypt取得凭证的方式后,但家有没有发现,Let's Encrypt的凭证有效期限非常短只有三个月,如果每三个月就要手动换一次会很麻烦,所以Let's Encrypt有提供自动更新凭证的功能 - Auto-Renew。
我们这次将实作Auto-Renew配合AWS的CLI来更新凭证。
你需要準备
AWS的EC2AWS的Certificate Manager:用来管理上传的凭证AWS的AIM:新增权限,让AWS CLI可以上传凭证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.sh
与renewCert.sh
设定至Crontab,让自动更新可以定时执行
$ sudo vi /etc/crontab
而copyCert.sh
与renewCert.sh
后方的参数分别为
copyCert.sh <你的domain> <你的folder>renewCert.sh <你的domain> <你的folder> <凭证的ARN>
以下是我的凭证的範例
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=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上就可以了,撒花~
谢谢你的阅读,也欢迎分享讨论指证~