[linux] 使用Let's Encrypt建立SSL, cron jobs自動更新憑證

建立時間: 2017-03-22 20:20:40
更新時間: 2018-06-11 00:25:54

前言

SSL除了能購提升網站的安全性

Chrome也開始會在沒有SSL的網站提示不安全訊息

甚至也會影響到SEO排名

所以SSL也開始變成一般網站的基本配備

 

一般SSL憑證必須花錢買

但其實也可以使用Let's Encrypt建立免費的SSL連線

不過Let's Encrypt憑證效期只有三個月

每三個月要更新一次憑證

為了避免麻煩

我們可以使用linux cron job的排程來自動更新憑證

 

安裝Let's Encrypt Client

sudo apt-get update
 sudo apt-get install python-letsencrypt-apache

 

簽署SSL憑證

假設現在要設定的domain為example.com

sudo letsencrypt --apache -d example.com

 

另外也能一次簽署多個domain

sudo letsencrypt --apache -d example.com -d www.example.com

 

可選擇Easy(允許HTTP/HTTPS)或是選擇Secure(強制使用HTTPS)

 

簽署成功

 

簽署完後

可以從這個網站確認SSL是否簽署成功

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

 

使用cron job排程自動更新憑證

一般要更新憑證要執行這個指令

sudo letsencrypt renew

 

我們可以使用cron job來執行這個指令

首先建立cron job

sudo crontab -e

 

接著選一個編輯器來編輯排程

Select an editor.  To change later, run 'select-editor'.
   1. /bin/ed
   2. /bin/nano        <---- easiest
   3. /usr/bin/vim.basic
   4. /usr/bin/vim.tiny

 

這邊為每個星期一凌晨12:00時執行一次憑證更新

0 0 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log

 

執行cron job

sudo /etc/init.d/cron start

 

其他cron job指令

# 新增cron job
 crontab -e
 
 # 移除cron job
 crontab -r
 
 # 顯示所有目前執行的cron job
 crontab -l

 

移除SSL

# 停用domain
 sudo a2dissite example.com
 
 # 進入let's encrypt資料夾
 cd /etc/letsencrypt/renewal
 
 # 刪除要移除的ssl
 sudo rm example.com.conf
 

 

參考資料: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

 

2018-04-07更新

certbot是let's encrypt官方建議的自動化工具

可以用這個來安裝ssl

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto --apache --redirect --keep-until-expiring --no-eff-email --agree-tos --email foo@gmail.com --domains example.com