HeQihan

HeQihan

如何使用cloudflare申請ssl證書

一年前申請的華為雲伺服器已經過期了,新的伺服器需要全新的 ssl 證書,由於國內的網絡環境問題,使用 Certbot 申請 Let's Encrypt 證書比較折磨,開放博客的最初一段時間只能依靠 cloudflare 的免費 cdn 來裝作有證書加密的樣子……
現在,好時代來臨了!只要把域名托管到 cloudflare 就可以用一種更加可靠的方法申請證書了。

本文方法需要命令行權限以及 cloudflare 的 api 令牌

Step 1#

把域名托管到 cloudflare。過程略,可以上網搜教程。這就是重其所重,輕其所輕。

Step 2#

首先我們需要用 ssh 連接到伺服器。然後安裝 Certbot,這是一個免費的開源工具,可以幫助我們自動化獲取和安裝 SSL 證書。

sudo apt-get update
sudo apt-get install certbot

然後安裝 Cloudflare 插件進行自動化 DNS 驗證。

sudo apt-get install python3-certbot-dns-cloudflare

Step 3#

然後我們需要在 cloudflare 裡申請一個 API 令牌,為之後的 DNS 驗證做準備,權限至少需要開 DNS 防火牆讀取與編輯、DNS 讀取與編輯。(注意一定要保存好令牌

圖片

Step 4#

創建一個 ini 文件把 API 令牌保存到伺服器上,我比較喜歡用 nano。

sudo mkdir ~/.secrets
sudo mkdir ~/.secrets/certbot
sudo nano ~/.secrets/certbot/cloudflare.ini

nano 輸入內容如下,your-cloudflare-api-token要換成自己的 API 令牌。

dns_cloudflare_api_token = your-cloudflare-api-token

然後我們要確保憑據文件的權限是安全的。

sudo chmod 600 ~/.secrets/certbot/cloudflare.ini

Step 5#

運行 Certbot 命令,進行自動化的證書申請。

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  -d example.com \
  -d www.example.com

需要把example.comwww.example.com替換為要申請的域名,但是這個命令常常不成功。由於 DNS 記錄傳播延遲,Let's Encrypt 未能找到所需的 DNS TXT 記錄,這個命令就會報錯。我們可以增加 DNS 記錄傳播時間,以確保 TXT 記錄有足夠的時間傳播到所有 DNS 伺服器。一般來說,60s 就足夠了。

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  --dns-cloudflare-propagation-seconds 60 \
  -d example.com \
  -d www.example.com

這樣的話,證書申請就大功告成了,每次證書到期後也會自動續期(當然是在 API 令牌過期之前),可謂省心省力。API 令牌過期的話只需要修改cloudflare.ini文件,然後重新運行這個命令就好。

此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.actorr.cn/posts/default/cloudflare_and_certificate

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。