跳到主要內容

如Let's Encrypt的 SSL憑證被防火牆GeoIP封鎖無法更新(HTTP-01),可改用 DNS‑01方法進行更新

有些學校伺服器因為長期遭到網路爬蟲攻擊洗流量,乾脆由上層路由防火牆GeoIP鎖掉台灣以外的IP,這樣是能立刻減少流量及0/1消耗,因為國外的爬蟲都被擋掉了,但同樣副作用也導致Let's Encrypt的 SSL憑證更新失敗,因為國外的IP都被鎖了,測試方式很簡單,只要於下列網址輸入需要模擬Let's Encrypt更新的網站,即可測試

Let's Debug:https://letsdebug.net/

如果返回紅字,那就是IP被鎖,上層 GeoIP 限制會讓驗證節點直接超時(Timeout during connect),連80port都連不到,綠字表示沒問題,黃字雖有問題仍可更新

解決無法更新方案就只能改用DNS‑01驗證,方法如下:


步驟 1:進入伺服器並執行 Certbot (紅字改為您網址)

sudo certbot certonly --manual --preferred-challenges dns -d example.com


步驟 2:Certbot 會顯示 TXT 記錄資訊

它會出現類似這樣的提示:

Please deploy a DNS TXT record under the name:

_acme-challenge.example.com.

with the following value:

s9pRq9l5R9Xg1wKQyEjQ0i_Z4Hh3V9cQeH6jLn2Qzj8

Before continuing, verify the TXT record has been deployed.

將以下綠字及紅字複製下來:

記錄名稱:_acme-challenge.example.com

記錄值:s9pRq9l5R9Xg1wKQyEjQ0i_Z4Hh3V9cQeH6jLn2Qzj8

備註:終端機上只需要把滑鼠左鍵長壓拖曳後放開即可自動複製,不需要用鍵盤的CTRL+C


步驟 3:在 Infoblox或是網址管理介面新增 TXT 記錄

登入 Infoblox 或網址管理介面(外網段)

找到 網址 對應的 DNS Zone

新增 TXT 記錄:

Name:_acme-challenge(Infoblox 會自動加上 .example.com,不需要自己寫完整)

Text / Value:s9pRq9l5R9Xg1wKQyEjQ0i_Z4Hh3V9cQeH6jLn2Qzj8 (Certbot 顯示的那串隨機字串)

儲存變更


如果再用Let's Debug:https://letsdebug.net/ 跑一遍,原本紅色的警示說明會變綠色(如果還是紅色就表示 TXT 記錄新增失敗)



步驟 4:回到 終端機 Certbot 繼續

當你確認 TXT 記錄建立生效後,

回到剛剛終端機 Certbot 的畫面,按 Enter 繼續。

Certbot 會顯示:Congratulations! Your certificate and chain have been saved at:

/etc/letsencrypt/live/example.com/fullchain.pem

代表驗證與憑證簽發完成。


步驟 5:部署新憑證

sudo systemctl reload apache2




這樣就完成DNS‑01更新Let's Encrypt的 SSL憑證方法,有需要的朋友參考看看!!


後記: DNS‑01方法雖然可更新被封鎖國外IP主機憑證,但無法自動更新,每三個月都需要手動執行以上程序一次。

工作心得撰寫:徐嘉裕 neil hsu

留言