提醒對於任何使用或引用本篇文章資訊與操作導(dǎo)致之損失或損害,本人概不負(fù)責(zé)。
前言
服務(wù)越架越多,No-ip三個免費DNS終於也不夠用了,
近期轉(zhuǎn)到Cloudflare註冊DNS,也想說不用再像原本那樣,
為每個DNS做letsencrypt的challenge,現(xiàn)在可以來試試申請Wildcard憑證。
但應(yīng)該會有個疑問,就是透過Cloudflare的CDN Proxy不是就能帶憑證了嗎?
有個原因是看到透過CloudFlare CDN有Cache 100MB的限制,
造成有些檔案傳輸?shù)?/font>服務(wù)容易因為限制而跳502 Bad Gateway,
但這聽說能設(shè)定Rule去bypass Cache,所以主要還是我想玩玩看XD。
環(huán)境
OS:Debian 12
1. 設(shè)定Cloudflare API Token
先開啟至如下URL,直接跳至Api token設(shè)定頁面:
如果對點開URL不放心的話,在你想設(shè)定的DNS Overview頁面右側(cè)應(yīng)該也能找到
1.1 點選建立Token
1.2 接著點編輯區(qū)域 DNS右邊的建立範(fàn)本
1.3 參考如下設(shè)定
*此處網(wǎng)上每個教學(xué)的設(shè)定都不大相同,可以先參考,有問題再來修改
1.4 點繼續(xù)至摘要,再點建立Token
就會看到Token,並且還有附上測試方式,太貼心了XD
*注意每筆Token只會在創(chuàng)建完成時顯示就這麼一次,所以務(wù)必保存好。
2.主機(jī)申請Wildcard憑證
開始前需要裝兩個套件
sudo apt install certbot python3-certbot-dns-cloudflare
2.1 創(chuàng)建隱藏資料夾
前面的cd是用來回到User home資料夾
cd ; mkdir .secret
2.2 寫入token資訊
建立並編輯cloudflare.ini檔案
vim cloudflare.ini
寫入以下資訊
dns_cloudflare_api_token = [前面取得的Cloudflare API Token]
2.3 申請憑證
接著就是申請憑證啦~,使用以下指令申請
*記得把以下指令的example.com替換成你自己的DNS
certbot certonly --dns-cloudflare --dns-cloudflare-credentials \
/root/.secrets/cloudflare.ini -d 'example.com' -d '*.example.com' \
--preferred-challenges dns-01
2.4 問題排除
原以為輕鬆過關(guān),但是我在申請時遇到以下Error
ERROR:certbot._internal.log:Error determining zone_id: 6003 Invalid request headers. Please confirm that you have supplied valid Cloudflare API credentials. (Did you copy your entire API token/key? To use Cloudflare tokens, you'll need the python package cloudflare>=2.3.1. This certbot is running cloudflare 2.11.1)
查詢有說法是說API Token權(quán)限設(shè)定問題,所以我的權(quán)限是參考這篇文章的方式設(shè)定如果不行的話可以再找找其他文章的設(shè)定方式
-> Wildcard SSL with Cloudflare - Hatchbox.io Help Center
設(shè)定完成後又跳出新的Error
504 Server Error: Gateway Time-out for url: https://api.cloudflare.com/client/v4/zones/951b18922bd8b725588f2358cb4e824e/dns_records
但這猜測是剛好Cloudflare那端有些問題,過段時間再嘗試就順利取得憑證了
完成後使用以下指令確認(rèn)憑證檔路徑和到期資訊
certbot certificates
到這裡就可以在自己的環(huán)境設(shè)定申請下來的憑證測試?yán)?(歡呼
3. 設(shè)定憑證自動更新
3.1 先來跑一下renew,確認(rèn)會不會有Error
certbot renew
3.2 確認(rèn)沒問題就來設(shè)定Cron job,定時去renew
crontab -e
寫入排程,我是指定每月1號凌晨2點進(jìn)行renew
*--quiet是執(zhí)行後不輸出資訊
00 02 01 * * /usr/bin/certbot renew --quiet
如果對Crontab時間設(shè)定方式不是很熟悉的話,可以試試用這個:
這樣就完成了Cloudflare DNS的Letsencrypt Wildcard憑證申請與設(shè)定了!
又是一篇颱風(fēng)假寫出來的文章~
參考文章