Let’s Encrypt 是免費、自動化和開放的憑證頒發機構,自從開放以來受到許多網站的重度運用,但因為免費的效期僅有90天,因此需要每3個月進來更新一次,隨著成立時間的推移,官方在設定的方式也經過多版本的演進,本篇紀錄2021年版本中依據官方的說明設定可以使用自動更新的方式。
- 有介於完整的流程比較複雜,這邊僅針對憑證的更新作介紹,諸如像是DNS、網域申請的作業等…,可參考網路上其他相關的文章
- DNS解析
- Certbot:Ubuntu-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
- 名稱請自行定義
- 務必選取「編輯」
- 選擇自己的網域
取用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;
參考文章:
———
官方網站:
———