現今大多數網站基於各種理由都需要支援 https,但剛開始經營網站時,會使用很多免費的 Https 憑證,最有名的是 let’s encrypt,但這些憑證通常只有三個月的期效,每三個月過後要延展或手動重新申請,要達成 ACME http challenge和 DNS challenge ( 萬用憑證 ) 或透過 nginx 延長憑證,都是一件很麻煩的事。
倘若想要取得萬用憑證 *.abc.com 都是得達成 DNS challenge,非常的麻煩,因此自己寫一個腳本,快速取得 let’s encrypt 免費憑證。
先回顧 DNS Challenge 的流程
像 Godaddy 及 Cloud flare 比較大的域名服務商,都支援 API Token 的方式,透過腳本( script ) 指令,去更新 DNS 值。
在購買 TW 的相關的域名在 Godaddy 或 Cloudflare 購買域名,比台灣的域名供應商每年貴了快 300 元以上,且台灣的域名供應商,多半不支援透過 API KEY 修改 DNS,因此我將域名免費託管在 Godaddy,方便透過去 API 修改相關的設定值。
Set-ExecutionPolicy RemoteSigned
Install-Module -Name Posh-ACME
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 *
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 憑證,想起來就讓人開心。
執行畫面