這裡紀錄合併兩台伺服器上 Let’s Encrypt SSL 憑證的步驟。

最近我用一台新的 Linode VPS 虛擬機器架設了 CentOS 的 LEMP 伺服器,經過測試之後感覺很不錯,接著想要把舊機器上的網站都搬到新機器上,搬動網站除了檔案與 MySQL/MariaDB 資料庫之外,還必須轉移 Let’s Encrypt SSL 的憑證,這樣才能讓 HTTPS 加密的網頁正常顯示。


而由於我的新舊兩台伺服器上都有安裝個別的 Let’s Encrypt SSL 憑證(不同網站),若想要把舊伺服器上的 SSL 憑證移動到新伺服器中,就必須要處理 Let’s Encrypt 設定檔與 SSL 憑證合併的問題。

目前 Let’s Encrypt 官方的指令工具並沒有提供合併兩台伺服器 Let’s Encrypt 設定檔與 SSL 憑證的功能,所以合併的工作需要手動處理。這裡我是依照 Let’s Encrypt 官方討論區文章上所建議的作法來合併。

合併兩台伺服器 Let’s Encrypt 設定檔與 SSL 憑證

Let’s Encrypt 的 SSL 憑證相關檔案與設定都放在 /etc/letsencrypt 這個目錄之下,在將舊伺服器的 Let’s Encrypt SSL 憑證搬到新伺服器時,只要打包以下三個目錄中的資料即可:

  • /etc/letsencrypt/archive
  • /etc/letsencrypt/live
  • /etc/letsencrypt/renewal

其中 /etc/letsencrypt/live 底下是連結檔,所以在複製的時候要注意這些連結的正確性。

建議直接以 root 權限把這三個目錄用 tar 打包起來:

# 打包
sudo su -
cd /etc/letsencrypt
tar zcf letsencrypt.tar.gz archive live renewal

然後將這個打包好的壓縮檔複製到新的伺服器上再解開,並放置在對應的位置。

# 解開
sudo su -
tar zxf letsencrypt.tar.gz

基本上來說,只要將這三個目錄下的資料都複製到新伺服器上,合併的工作就完成了,而如果新舊伺服器上的網頁檔案放置路徑不同,記得要檢查 /etc/letsencrypt/renewal 中的設定檔,還有網頁伺服器(如 nginx)的設定檔,修改相關的路徑。

最後再確認一下自動更新憑證是否可以正常運作:

sudo certbot renew --dry-run

若可以正常更新憑證的話,這樣就完成了。若之前有設定好 certbot 更新憑證的 crontab,則之後這些移過來的憑證就會跟著自動更新了。