協同設計室(二)

昨天, 採用 Fossil SCMStunnel 建置的 https://[2001:288:6004:17:0811::cd06] 虛擬主機網站已經初步完成. 大家從手機中的瀏覽器就可以直接連線 (因為已經都支援 IPv6 協定). 接下來必須將此 IPv6 網址與 cd06.kmol.info 對應之外, 還要取得此一網址的第三方簽署的數位簽章.

IPv6 網址與符號名稱的設定, 必須在 DNS 伺服器中指定一組 AAAA 設定, 將兩者綁定, 而網址的數位簽章, 則採用 certbot 完成.

Certbot 數位簽章

certbot 數位簽章的取得與設定, 是由 nginx 的一組 Python 延伸程式完成. 由於之前已經將 https 所使用的 443 埠號交給 Stunnel 使用, 但當時所採用的是 self-signed 的數位簽章, 並沒有登錄在公開的 public server 上. certbot 驗證網址的方式是透過 nginx 的連線完成, 因此接下來必須安裝 nginx, 使用的埠號為 http 協定的 port 80. 在 Ubuntu 18.04 中安裝 nginx, 執行:

$ sudo apt install nginx

接著, 必須安裝 certbot 延伸程式:

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx 

其中, 在 Ubuntu 18.04 執行 sudo add-apt-repository ppa:certbot/certbot 並沒有完成, 但似乎不影響隨後的 python-cerbot-nginx 安裝.

這時為了保留原始 nginx 執行設定 /etc/nginx/sites-available/default, 必須以 sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_orig 加以保留.

接著透過 $ sudo certbot --nginx 讓 certbot 自動設定所需的 https 連線參數, 即可取得 /etc/letsencrypt/live/cd06.kmol.info/fullchain.pem 與 /etc/letsencrypt/live/cd06.kmol.info/privkey.pem 等兩數位公鑰與私鑰檔案.

完成 certbot 指令後, /etc/nginx/sites-available/default 將會依使用者選擇要從 http 跳轉 https, 或不跳轉, 插入必要的設定修改, 取得數位簽章後, 以 sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_cert 儲存 certbot 所修改的 nginx 設定.

接下來則將 /etc/nginx/sites-available/default 恢復為原先的 default_orig 版本, 因為這裡只讓 nginx 佔用 port 80, port 443 仍然必須交還給之前所設定的 Stunnel 服務.

nginx 恢復原狀後, 可以利用 /etc/init.d/nginx restart 重新啟動.

而 /etc/stunnel/ 目錄中原有的 localhost.crt 與 localhost.key 改為 localhost_self.crt 與 localhost_self.key, 並從 /etc/letsencrypt/live/cd06.kmol.info/fullchain.pem 與 /etc/letsencrypt/live/cd06.kmol.info/privkey.pem 複製 public signed 的網址數位簽章, 分別複製為 /etc/stunnel/localhost.crt 與 localhost.key 後, 以 /etc/init.d/stunnel4 start 啟動.

假如一切正常, 使用者便可以連線到 https://cd06.kmol.infohttp://cd06.kmol.info, 前者為 Fossil SCM 加上 Stunnel, 而後者則由 nginx 伺服.