Mark Ku's Blog
首頁 關於我
使用 Powershell 達成 let's encrypt DNS 挑戰,取得 免費 https 憑證
PowerShell
使用 Powershell 達成 let's encrypt DNS 挑戰,取得 免費 https 憑證
Mark Ku
Mark Ku
May 14, 2022
1 min

問題

現今大多數網站基於各種理由都需要支援 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 憑證到期提醒與監測,可以當個備案。

結論

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

執行畫面

參考資料1

參考資料2

參考資料3

參考資料4


Tags

Mark Ku

Mark Ku

Software Developer

9年以上豐富網站開發經驗,開發過各種網站,電子商務、平台網站、直播系統、POS系統、SEO 優化、金流串接、AI 串接,Infra 出身,帶過幾次團隊,也加入過大團隊一起開發。

Expertise

前端(React)
後端(C#)
網路管理
DevOps
溝通
領導

Social Media

facebook github website

Related Posts

Reduce the risk of manual deployment using powershell and beyondcompare
Reduce the risk of manual deployment using powershell and beyondcompare
June 27, 2023
1 min

Quick Links

關於我

Social Media