更新 Let's Encrypt 數位簽章

制式的 Let's Encrypt 以安裝 python-certbot-nginx 程式從 certbot 網站取得正式的數位簽章, 然後自動修改原先只有 http 設定的 nginx 網站, 重新啟動後, 就可以讓該網站以 https 連結.

90 天有效期

雖然每次從 certbot 取得的數位簽章只有 90 天效期, 但是 python-certbot-nginx 程式提供了 autorenew 的功能, 使用者可以持續透過自動更新使用由 certbot 提供的數位簽章.

只不過目前在 KMOLab 所使用的網站, 幾乎都以安裝 Fossil SCM 為主, nginx 的功能在於從 http 跳轉到以 Stunnel 啟動的 https, 並且由 Stunnel 啟動程式在內部 IP 傳送 Fossil SCM 的網站資料.

換言之, KMOLab 從 certbot 取得的正式數位簽章並非用於 nginx, 而是轉給 Stunnel 使用. 而目前的 python-certbot-nginx 只能透過 nginx 確認網站合法的 domain name 設定, 因此在修改程式轉為相容 Stunnel 之前, 使用 certbot 的數位簽章, 必須手動進行.

實際操作步驟

首先必須停止 Stunnel 執行:

sudo /etc/init.d/stunnel4 stop

接下來停止 nginx 執行:

sudo /etc/init.d/nginx stop

接著將目前從 nginx http 跳轉到 Stunnel 啟動的 https 網站設定 /etc/nginx/sites-available/default 改為由 nginx 掌控 https 的 default_certbot 設定.

接著重新啟動 nginx:

sudo /etc/init.d/nginx start

然後取得新的數位簽章:

sudo certbot renew

所取得的公鑰與私鑰檔案:

/etc/letsencrypt/live/mde1a1.kmol.info/cert.pem /etc/letsencrypt/live/mde1a1.kmol.info/privkey.pem

最後將 cert.pem 複製為 /etc/stunnel/localhost.crt, privkey.pem 複製為 /etc/stunnel/localhsot.key 後, 將 /etc/nginx/sites-available/default 換為跳轉為 Stunnel 控管的 default_stunnel, 重新啟動 nginx 與 stunnel, 就可以使用該數位簽章於從 nginx http 跳轉至正式 https 的 Stunnel+Fossil SCM 網站.

其中用來跳轉 https 的 nginx 設定:

server {
listen 80;
server_name mde1a1.kmol.info;
rewrite ^/(.*)$ https://mde1a1.kmol.info/$1 permanent;
}

以 mde2a1.kmol.info 電腦的 certbot 數位簽章更新為例, 命令執行流程如下:

sudo /etc/init.d/nginx stop
sudo /etc/init.d/stunnel4 stop

sudo cp /etc/nginx/sites-available/default_certbot /etc/nginx/sites-available/default
sudo /etc/init.d/nginx start
sudo certbot renew

sudo cp /etc/nginx/sites-available/default_stunnel /etc/nginx/sites-available/default
sudo /etc/init.d/nginx restart

sudo cp /etc/letsencrypt/live/mde2a1.kmol.info/cert.pem /etc/stunnel/localhost.crt
sudo cp /etc/letsencrypt/live/mde2a1.kmol.info/privkey.pem /etc/stunnel/localhost.key

sudo /etc/init.d/stunnel4 start