close
這幾天收到 Let's encrypt 的提醒網域認證即將過期的信件,覺得奇怪我不是有設定 crontab 自動更新嗎?後來搜尋了一下才發現,原來 Certbot 預設的 renew 在萬用字元 (wildcard) 的域名會失敗。因為我有透過 Cloudflare 做 DNS 管理,網路上建議透過外掛 certbot-dns-cloudflare 更新,以下是設定方式:
  • 先到 Cloudflare > 右上角我的設定檔 > API Token > Global API Key > 檢視 取得 token
  • 2021-02-01_100006.png
  • 進入主機
  • # 建立目錄與檔案
    sudo mkdir ~/certbot
    sudo vi ~/certbot/cloudflare.ini
     
    dns_cloudflare_email = "Cloudflare 的帳號"
    dns_cloudflare_api_key = "Global API Key"
     
    # 修改目錄與檔案權限
    sudo chmod 0700 ~/certbot
    sudo chmod 0400 ~/certbot/cloudflare.ini
     
    # 安裝前需要同意 certbot 使用 root 權限
    sudo snap set certbot trust-plugin-with-root=ok
    
    # 安裝 certbot-dns-cloudflare
    sudo snap install certbot-dns-cloudflare
     
    # 重新認證域名 example.com, *.example.com 請改為你的域名
    sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/certbot/cloudflare.ini -d "example.com" -d "*.example.com" --preferred-challenges dns-01

不過這時我才發現,使用免費域名(Freenom)的認證仍會失敗,因為無法透過 API 自動修改 Cloudflare DNS 設定...(囧)好吧,那就只能手動重新認證域名

# 手動認證域名,cloudflare 新增 TXT 訊息,example.ga, *.example.ga 請改為你的域名
sudo certbot certonly --preferred-challenges dns --manual -d "example.ga" -d "*.example.ga" --server https://acme-v02.api.letsencrypt.org/directory

# 確認 TXT 是否生效
nslookup -type=txt _acme-challenge.example.ga

# 成功通過認證後重啟 nginx
sudo service nginx restart

# 確認認證
sudo certbot certificates

總算是延期成功,沒想到萬用字元域名更新竟然需要另外特別處理,當免費仔還不給用 API!(怒)要繼續當下去只好勤奮一點,每三個月自己手動認證一次囉~其實也不會很麻煩啦!

參考資料

arrow
arrow

    danielhuang030 發表在 痞客邦 留言(0) 人氣()