[SSL] Nginx 整合 Certbot 替網站加上 SSL

前言

上一篇架設完 Server 後會發現網站是未加密的狀態,因此瀏覽器會將該網站標示為 **”不安全”**,本文記錄如何替網站加上 SSL 憑證進行加密。

環境

  • OS: Ubuntu 18.04
  • Server: Nginx 1.14

下載 Certbot

1
2
sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-nginx

確認 Nginx’s 設定檔

上一篇有提到Nginx的相關設定,查看一下

1
cat /etc/nginx/sites-available/project_name.conf

確認填寫的網址server_name example.com www.example.com;

若遇到inactive的狀況,則執行sudo ufw enable

1
2
sudo ufw enable
sudo ufw status

取得 SSL Certificate

使用 nginx 執行 certbot,並使用-d指定我們希望的網域名稱,對其發行 certificates。

1
sudo certbot --nginx -d example.com -d www.example.com

系統會要求輸入email,輸入完畢後再選擇Agree。接著會詢問選擇是否要將所有的資源請求導向HTTPS的網域,故選擇2

更新 SSL certificates

1
sudo cerbot renew --dry-run

若出現錯誤訊息: sudo: cerbot: command not found,可以採用以下方式。

找出certbot路徑

1
which certbot

接著執行下方指令,將certbot_path替換成剛剛拿到的路徑名稱

1
sudo certbot_path renew --dry-run

設定成功的訊息

自動更新憑證

由於 Let’s Encrypt 憑證簽發為每三個月一次,也就是每 90 天必須更新(renew)一次,雖然 SSL For Free 提供訂閱通知的機制,在憑證過期前會收到電子郵件告知你要更新憑證。

不過身為一位工程師,秉持能自動就不要手動的精神,我們可以藉由 crontab 設置排程工作定期幫我們更新 SSL 憑證。

確認憑證狀態

1
sudo certbot certificates

會出現類似下方訊息

1
2
3
4
5
6
7
8
9
10
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: xxxx.xxxx.com
Domains: xxxx.xxxxxx.com
Expiry Date: xxxx-xxxx-xxxx 03:44:52+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/xxxxxx.xxxxxx.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/xxxxxx.xxxxxx.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

上述資訊可看出憑證距離到期還有多久的時間

設置排程工作

1
sudo crontab -e

寫入排程規則

下方指令以固定每月1號進行 renew SSL 憑證為例,其中 --quiet 表不產生輸出結果

1
0 0 1 * * /usr/bin/certbot renew --quiet

想了解更多排程規則可以試試這個網站,幫助大家能快速了解自己設的規則

Reference

Comments