acme DNSapi
acme DNSapi的作用是在申請證書時使用dns校驗,acme可以透過dnsapi在對應的dns管理平臺提交對應的dns記錄。玩過證書的朋友都知道,證書申請時有三種驗證方式
- 郵箱驗證:需要郵箱與域名繫結(細節要求我沒試過)
- 檔案驗證:檔案驗證時證書管理方會要求你在伺服器的指定路徑上放一個指定檔案(內容也是他們定),然後開放80埠,他們會去下載這個檔案從而驗證你的身份。申請證書時你需要去你的伺服器上操作,還要開放指定埠
- DNS驗證:DNS驗證只需要你在dns記錄上新增一條TXT記錄就可以
我們這裡用到的就是DNS驗證,DNS驗證雖然方便,但是每次申請都需要新增一條DNS記錄(申請完成後可以刪除,acme好像自動幫忙刪除了),如果要實現自動化,acme需要有許可權向dns記錄方提交記錄。
cloudflare DNSapi
acme dns api doce
根據上面的文件可以看到cloudflare dns api 有兩種方式獲取
- 生成cloudflare的全域性token(全域性token擁有cloudflare的所有許可權,大部分是acme用不到的)
- 生成cloudflare的DNS許可權token(推薦,夠acme用的了)
生成cloudflare的DNS許可權token
先來cloudflare的Api申請頁面
點選這裡的建立令牌
選擇編輯區域DNS 這個模板(一般來說是第一個)
按照下面的內容填寫
許可權選 區域
-> DNS
-> 編輯
區域資源 包括
-> 特定區域
-> 在下拉選單裡選你的域名(你也可以在第二個框裡面選擇所有區域
)
剩下都不變,點繼續,跳轉到這個頁面
點選生成令牌,就會產生一個令牌,令牌生成後第一時間記錄下來,這個令牌只顯示一次,重新整理頁面後就看不到了
獲取cloudflare的使用者資訊
點到cloudflare中對應的網頁管理頁面,在api的地方可以看到兩個ID
現在我們有三個資訊
- 上面生成的一個管理DNS的TOKEN
- 這裡的區域ID
- 這裡的賬戶ID
在對應伺服器上生成證書
設定環境變數
export CF_Token="填DNS token"
export CF_Zone_ID="填區域ID"
export CF_Account_ID="填賬戶ID"
安裝acme
apt update -y #更新系統
apt install -y curl #安裝curl
apt install -y socat #安裝socat
curl https://get.acme.sh | sh
生成證書
acme.sh --issue --dns dns_cf -d test.fun -d "*.test.fun"
如果說找不到acme.sh,可以使用下面的命令
~/.acme.sh/acme.sh --issue --dns dns_cf -d test.fun -d "*.test.fun"
等他跑碼,會告訴你證書的位置
關鍵是上面兩行your cert
, your cert key
上面生成的證書是 *.test.fun
的證書,所有的以test.fun
結尾的域名都可以用這個證書
推薦的使用方案: 因為acme正常2個月會自動更新一下證書,所以我不推薦你把證書移動到別的位置,因為acme下次生成的時候還會放在這個位置,要麼你指定acme的證書生成路徑,可以用
acme.sh --help
檢視怎麼指定路徑。我使用的方法是(有兩個)
直接使用這個路徑
透過軟連線把證書連結過去
比如我要把證書放在/etc/nginx/ssl 裡面 分別命名為
cert.crt
priv.key
我可以這樣做cd /etc/naginx/ssl ln -s /home/ivhu/.acme.sh/證書路徑.cer cert.crt ln -s /home/ivhu/acme.sh/證書私鑰.key priv.key
證書生成後一般會新建一個cron 的定時認為用來維護證書保證期
可以透過 crontab -e
命令檢視,我的結果是這樣的:
意思是每天凌晨3:28會檢查一下證書
如果你的證書是給nginx
用的可以在root
使用者下執行crontab -e
編輯root使用者的cron自動化命令
新增如下:
0 4 * * * systemctl reload nginx
表示每天4:00 重啟nginx ,因為nginx的證書需要重啟之後才能過載