改用 Let’s Encrypt 的 certificates

之前都在用 StartSSL 的免費 certificate,雖知道有 Let’s Encrypt,但因手邊幾乎都轉用 nginx,遲遲沒下手。

約莫一週前 zeroplex 丟了這個網頁:「Why I stopped using StartSSL (Hint: it involves a Chinese company)」,三、四天前 DK 大神也撰文提及,就決定趁週末沒什麼事來動工…

用 DK 大神在一個月前撰文提過的 dehydrated 這個 GitHub 專案可以輕鬆搞定,步驟大致如下…

  1. 找個自己喜歡的目錄(不是 /tmp …),把 dehydrated clone 出來
  2. 在 clone 出來的目錄之下建立 .acme-challenges 目錄
    mkdir dehydrated/.acme-challenges
  3. 在原本的 HTTP (80 port) 設定下建立 alias,把網站的 /.well-known/acme-challenge 指向剛建立好的目錄
  4. 讓 HTTP daemon 重讀設定
  5. 執行這個指令
    dehydrated/dehydrated -c -d {網站hostname}
  6. 完成 & 成功後就會在 dehydrated/certs 發現目錄,目錄下有數個檔案
  7. 我自己讓 nginx 使用 fullchain.pem 跟 privkey.pem,設定大致如下:
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
    
        ssl on;
        ssl_certificate /SOMEWHERE/dehydrated/certs/{網站hostname}/fullchain.pem;
        ssl_certificate_key /SOMEWHERE/dehydrated/certs/{網站hostname}/privkey.pem;
        ssl_trusted_certificate /SOMEWHERE/dehydrated/certs/{網站hostname}/fullchain.pem;
        ....
    }
    

我記得 Let’s Encrypt 的 certificate 要在 90 天內 renew,所以 cron job 這樣放:

0 0 1 */2 * /SOMEWHERE/dehydrated/letsencrypt.sh -c -d {網站hostname} > /dev/null 2>&1

Updated : letsencrypt.sh 改為 dehydrated 。