Let’s Encrypt 是免費、自動化和開放的憑證頒發機構,自從開放以來受到許多網站的重度運用,但因為免費的效期僅有90天,因此需要每3個月進來更新一次,隨著成立時間的推移,官方在設定的方式也經過多版本的演進,本篇紀錄2021年版本中依據官方的說明設定可以使用自動更新的方式

  • 有介於完整的流程比較複雜,這邊僅針對憑證的更新作介紹,諸如像是DNS、網域申請的作業等…,可參考網路上其他相關的文章
  • DNS解析
  • CertbotUbuntu-Nginx 設置

 

STEP 1:安裝Snap.Cerbot套件

# sudo apt update $ sudo apt install snapd

 

STEP 2:確認Snap版本是最後的版本

# sudo snap version;sudo snap revert

 

STEP 3:安裝Cerbot

# sudo snap install –classic certbot

 

STEP 4:建立指令執行連結

# sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

STEP 5:檢查已安裝的plug-in與Snap Cerbot使用相同的容器

# sudo snap set certbot trust-plugin-with-root=ok

 

STEP 6:安裝DNS檢查外掛

# sudo snap install certbot-dns-cloudflare
其他支援DNS商安裝查詢:https://certbot.eff.org/docs/using.html#dns-plugins

 

STEP 7:安裝憑證

# sudo certbot –nginx (自動安裝 )
# sudo certbot certonly –nginx (手動安裝 )
官方版本針對的是單一獨立憑證的更新,但因為要申請的是萬用憑證,需要結合Cloudflare的API Token進行驗證,所以需要繼續往下執行 …

 

STEP 8:申請Cloudflare API
點選[我的設定]

點選[API-Token]-[Create Token]

產生API-Token

  1. 名稱請自行定義
  2. 務必選取「編輯」
  3. 選擇自己的網域

取用API-Token

 

STEP 9:建立Token取用設定檔

官方設定檔說明:Welcome to certbot-dns-cloudflare’s documentation!
# echo “Your Token Number” > /etc/letsencrypt/dns-cloudflare.conf

 

STEP 10:申請憑證

# sudo certbot certonly \
–dns-cloudflare \
-i nginx \
–dns-cloudflare-credentials /etc/letsencrypt/dns-cloudflare.conf \
–email [email protected] \
–server https://acme-v02.api.letsencrypt.org/directory \
-d aiso.idv.tw \
-d *.aiso.idv.tw \
–dns-cloudflare-propagation-seconds 30

預設提供5種方式進行驗證,依據步驟往下進行即可

 

STEP 11:檢查憑證可否自動更新

2021最新版本中,官方已將更新頻率設定寫入程式中,不需要再額外設定排程,但須要模擬進行可否正確地進行更新

# certbot renew –dry-run

 

STEP 12:更新時間參數設定位置(2澤1均可)

—— Cronjob 排程 ——

# vi /etc/cron.d/certbot (關閉直接在前端註解#即可
0 0 */10 * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e ‘sleep int(rand(43200))’ && certbot -q renew

—— Systemd 的 Timer 排程 ——

查詢Timer排程 (snap.certbot.renew.timer)
systemctl list-unit-files –type timer
systemctl list-timers –no-pager
systemctl restart snap.certbot.renew.service (重新啟動服務)
systemctl stop snap.certbot.renew.service (停止服務)

Thu 2021-12-30 17:40:00 CST 5h 50min left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
( 2021/12/30 17:40會執行snap.certbot.renew.timer對應的排程 )

編輯Timer排程
# vi /etc/systemd/system/timers.target.wants/snap.certbot.renew.timer

[Unit]
# Auto-generated, DO NOT EDIT
Description=Timer renew for snap application certbot.renew
Requires=snap-certbot-1670.mount
After=snap-certbot-1670.mount
X-Snappy=yes

[Timer]
Unit=snap.certbot.renew.service
OnCalendar=*-*-* 06:00
OnCalendar=*-*-* 18:00
(依自行需求修改)

[Install]
WantedBy=timers.target

 

STEP 13:刪除Cerbot 憑證檔案

# certbot delete –cert-name aiso.idv.tw (指定)
# certbot delete –cert-name aiso.idv.tw (全部刪除)

 

STEP 14:增加Nginx SSL取用參數

# vi nginx/site-enable/[You’r sitename].conf

ssl_certificate /etc/letsencrypt/live/aiso.idv.tw/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/aiso.idv.tw/privkey.pem;

# 使用的加密協定
ssl_protocols TLSv1.2;
# 加密演算法,越前面的優先級越高
ssl_ciphers ‘ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS’;
# 交握過程使用 Server 的首選加演算法,這裡使用 Client 為首選
ssl_prefer_server_ciphers on;

#
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
#

# 增加 http header
add_header Referrer-Policy origin-when-cross-origin;
add_header Feature-Policy “microphone ‘none’; payment ‘none’; sync-xhr ‘self’ https://*.aiso.idv.tw”;

# 從`.htaccess`借來的HTTP響應頭
add_header Strict-Transport-Security “max-age=15768000; includeSubDomains; preload;” always;
add_header Referrer-Policy “no-referrer” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-Download-Options “noopen” always;
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Permitted-Cross-Domain-Policies “none” always;
add_header X-Robots-Tag “none” always;
add_header X-XSS-Protection “1; mode=block” always;

參考文章:
———

 

官方網站:
———