Mark Ku's Blog

問題

現今大多數網站基於各種理由都需要支援 https,但剛開始經營網站時,會使用很多免費的 Https 憑證,最有名的是 let's encrypt,但這些憑證通常只有三個月的期效,每三個月過後要延展或手動重新申請,要達成 ACME http challenge和 DNS challenge ( 萬用憑證 ) 或透過 nginx 延長憑證,都是一件很麻煩的事。

倘若想要取得萬用憑證 *.abc.com 都是得達成 DNS challenge,非常的麻煩,因此自己寫一個腳本,快速取得 let's encrypt 免費憑證。

DNS 驗證流程

先回顧 DNS Challenge 的流程

  1. 向 let's encrypt 取得驗證內容
  2. 在 DNS 主機加上 Let's encrypt 指定 TXT 記錄
  3. 取得憑證
  4. 移除 主機加上 Let's encrypt 先前指定的 TXT 記錄

實作的想法

像 Godaddy 及 Cloud flare 比較大的域名服務商,都支援 API Token 的方式,透過腳本( script ) 指令,去更新 DNS 值。

域名供應商不支援 API 更新 DNS 設定。

在購買 TW 的相關的域名在 Godaddy 或 Cloudflare 購買域名,比台灣的域名供應商每年貴了快 300 元以上,且台灣的域名供應商,多半不支援透過 API KEY 修改 DNS,因此我將域名免費託管在 Godaddy,方便透過去 API 修改相關的設定值。

撰寫 Power shell 腳本

調整 Powershell 執行權限

Set-ExecutionPolicy RemoteSigned

安裝 Posh-ACME 模組

Install-Module -Name Posh-ACME

Godaddy 的腳本 (godaddy-dns-challenge.ps1)

Set-PAServer "LE_Prod"

$pArgs = @{GDKey="輸入Godaddy API KEY";GDSecret="輸入Godaddy Secret"}         

 New-PACertificate *.letgo.com.tw -FriendlyName *.letgo.com.tw -PfxPass password01 -AcceptTOS -Contact [email protected] -DnsPlugin GoDaddy -PluginArgs $pArgs
 
Get-PACertificate | fl *

Cloudflare 的腳本 ( cloudflare-dns-challenge.ps1 )

Set-PAServer "LE_Prod"
$secToken = "輸入你的 Cloud Flare API 金鑰"
$pArgs = @{ CFToken = $secToken }
New-PACertificate *.letgo.com.tw -FriendlyName *.letgo.com.tw -PfxPass password01 -AcceptTOS -Contact [email protected] -DnsPlugin CloudFlare -PluginArgs $pArgs
Get-PACertificate | fl *

監測憑證失效的工具

除了先前文章所提到的 uptime-kuma 可以在憑證失效的 7天、14天、21天憑證過期前會提醒。此外 LetsMonitor 也提供免費 SSL 憑證到期提醒與監測,可以當個備案。

LetsMonitor編輯憑證有效性監控設定
LetsMonitor編輯憑證有效性監控設定

結論

透過大型域名供應商的 API,透過腳本去達成 let's encrypt Http DNS 驗證,是相當方便的,搭配排程透執行指令的方式,就算是一次管理1000台,我想應該也是沒問題,不花錢又能使用免費的 Https 憑證,想起來就讓人開心。

執行畫面
PowerShell視窗顯示Let's Encrypt憑證檔案列表

參考資料1

參考資料2

參考資料3

參考資料4

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··604

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··471

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··329

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··240

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··235

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··216

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
使用 Powershell 達成 let's encrypt DNS 挑戰,取得 免費 https 憑證 - Mark Ku's Blog