2 月 22 2016
改用 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 專案可以輕鬆搞定,步驟大致如下…
- 找個自己喜歡的目錄(不是 /tmp …),把 dehydrated clone 出來
- 在 clone 出來的目錄之下建立 .acme-challenges 目錄
mkdir dehydrated/.acme-challenges
- 在原本的 HTTP (80 port) 設定下建立 alias,把網站的 /.well-known/acme-challenge 指向剛建立好的目錄
- 讓 HTTP daemon 重讀設定
- 執行這個指令
dehydrated/dehydrated -c -d {網站hostname}
- 完成 & 成功後就會在 dehydrated/certs 發現目錄,目錄下有數個檔案
- 我自己讓 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 。
3 月 16 2018
開始用 Let’s Encrypt 的 wildcard certificate
2016 年自己寫過 改用 Let’s Encrypt 的 certificates,文內提到的 dehydrated 也持續在使用。
這幾天看到 Let’s Encrypt 貼出 ACME v2 and Wildcard Certificate Support is Live。
Let’s Encrypt 的 wildcard certificate 實作大概要注意以下幾點:
使用 dehydrated 進行 DNS challenge 可以參考這幾份文件:
我選擇用 nsupdate 的方式(參考 dehydrated Wiki : example dns 01 nsupdate script),在 DNS master server 建立 _acme-challenge.{DOMAIN} 的 NS record,讓 hook script 透過 nsupdate 連線到指定的 name server 更新 TXT record 。
DNS 方面完成後,要記得佈署 hook script 與 nsupdate 使用的 key。
接著是調整語法,原本的語法:
改為:
( –alias 指定的 wildcard.{DOMAIN} 會成為目錄名稱,用來存放憑證 )
By Joe Horn • WWW 0 • Tags: certificate, dehydrated, DNS, HTTPS, Let's Encrypt, nsupdate, SSL