Let’s Encrypt

小弟的域名雖然託管在 Route53 上面 ,也知道 AWS 也有提供 ACM 搭配 ELB 憑證託管的免費方案,但有時候申請幾張 憑證來用是相當實用的。

Let’s Encrypt 的數位憑證認證機構(CA)推出免費 SSL/TLS 憑證服務,也在年底正式對外開放。這是什麼呢?簡單來說,以往想為你的網站加入 SSL 加密協定(HTTPS,也就是網址列上的綠色鎖頭圖示),必須支付一筆費用來申請憑證,但有了 Let’s Encrypt 後將能免費申請憑證,且這一過程非常簡單、自動化。

值得注意的是 Let’s Encrypt 提供的憑證只有90天,每60天可以更新(renew)憑證。 Certbot 提供相當完整的安裝指引,到 https://certbot.eff.org/ 來做到自動化的更新憑證。

並且 Certbot 還有提供 docker image 使安裝 Certbot 更快速且簡單,不會污染到環境。

docker hub

https://hub.docker.com/r/certbot/dns-route53

因為我的domain 託管在 Route53 Certbot 更是有提供搭配 route 53 驗證憑證的方法,更有可以調用 route53 驗證 ,給予憑證的 role or iam user 需要的 IAM Policy 如下:

{
    "Version": "2012-10-17",
    "Id": "certbot-dns-route53 sample policy",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:ListHostedZones",
                "route53:GetChange"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect" : "Allow",
            "Action" : [
                "route53:ChangeResourceRecordSets"
            ],
            "Resource" : [
                "arn:aws:route53:::hostedzone/YOURHOSTEDZONEID"  <- 要換成您的
            ]
        }
    ]
}

Certbot-route53 docs

https://certbot-dns-route53.readthedocs.io/en/stable/

現在假設您的執行環境是 EC2 (ubuntu) , EC2 的 IAM Role 也已 attach 上述的 IAM Policy 。 # run image and set .aws default config in container

$ docker run -it --rm  --entrypoint ash certbot/dns-route53

# 將YOUR_DOMAIN 換成您拖管在 route53 的 domain name , YOUR_EMAIL 換成您的 Email。
# 進入 container 內。
certbot certonly --agree-tos \
   --dns-route53 \
   --dns-route53-propagation-seconds 30 \
   -d *.${YOUR_DOMAIN} -m ${YOUR_EMAIL} --eff-email 

# 等待大概 30 s 
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Found credentials in shared credentials file: ~/.aws/credentials
Plugins selected: Authenticator dns-route53, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/${YOUR_DOMAIN}/fullchain.pem   <- 憑證在這
   Your key file has been saved at:
   /etc/letsencrypt/live/${YOUR_DOMAIN}/privkey.pem     <- key 在這
   Your cert will expire on 2020-08-15. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
/etc/letsencrypt/live/${YOUR_DOMAIN}/fullchain.pem   <- 憑證在這
Your key file has been saved at:
/etc/letsencrypt/live/${YOUR_DOMAIN}/privkey.pem     <- key 在這

然後再把 憑證複製出來即可 。

2020年5月17日 Neil Kuan