Letsencrypt證書一處申請多伺服器同步
我自己域名的SSL證書都是使用的Letsencrypt
,不但免費而且使用certbot
申請也特別方便快速。之前都是申請單域名的證書,在每個需要的伺服器上分別單獨申請。開始需要證書的服務少還好,後來越來越多了,自己的一個小網站、nextcloud伺服器、openVPN、家裡的路由器後臺、openmediavault等,這樣的話在每個機器上都得申請一次,太繁瑣。而Letsencrypt
支援泛域名申請,那麼我們就可以在一臺伺服器上申請然後同步到其他伺服器上。
於是我抽空這兩天簡單擼了一個Letsencrypt證書自動續租及其他伺服器自動同步的程式。專案地址:
https://github.com/xubiaosunny/certbot-async
具體使用方法參見專案的README.md
服務執行模式為 客戶端-伺服器 模式,程式碼使用python3開發。
整套服務的兩種工作模式:
- 主動式(相對於客戶端而言)
該模式就是客戶端自動請求服務端,如果發現證書已經變動則下載證書。可以將客戶端指令碼加入crontab
,讓指令碼定時檢查服務端證書的變化,並獲取。這種方式相對於訂閱模式缺乏實時性,但也影響不大,Letsencrypt證書續租一次三個月有效期,而只能提前30天續租,只要客戶端更新及時,不會逾期也,可以定時任務設定為每天執行。
- 訂閱模式
該模式講究實時性,只要服務端續租成功將馬上將證書同步到已經訂閱服務的客戶端伺服器上。客戶端訂閱的時候會將服務端的ssh公鑰注入到本地,已方便服務端免密碼同步證書檔案。服務端免密同步使用rsync
。客戶端也需要加入crontab
來不斷訂閱,因為訂閱的有效期為60天。