Skip to content

About

No description, website, or topics provided.

Resources

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# CertflowScope

> ⚠️ **v0.1,測試版發布**。腳本依 Windows PowerShell 5.1 撰寫,請先在測試主機跑過驗證再推到正式機。
> 
> 腳本內部識別名稱沿用 `certflow`(排程 `certflow-pull`、路徑 `C:\ProgramData\certflow`)。

**Windows / IIS 憑證自動化:中央簽發一次,管理者核准,每台 IIS 自動領取並替換。**

不需要 Ansible、不用開 WinRM 防火牆,也不用自己架伺服器。靠的是 Windows 內建機制:**PowerShell + 一個共用資料夾(SMB)+ AD 電腦帳號**。

---

## ⚡ 3 步驟超快速上手(給急著想動工的你)

整套工具其實只要做這三件事:

### 步驟 1:開一個共用資料夾(只要做一次)

開一個 SMB 共用(例如 `\\nas\certs`),讓中央簽發機可以**寫入**,並讓所有 IIS 伺服器的**「AD 電腦帳號」**可以**唯讀**。

### 步驟 2:去各台 IIS 安裝代理(只要跑一次)

把 `windows/` 資料夾抓到 IIS 主機上,編輯 `agent.psd1` 填入共用路徑,按右鍵以「系統管理員身分」執行 PowerShell:

```powershell
# 安裝本機排程,每天自動去共用資料夾看有沒有新憑證
.\Install-Agent.ps1 -ConfigPath .\agent.psd1 -RunNow

步驟 3:中央發布憑證(每次換憑證時)

憑證申請好丟進 staging\ 後,管理者在中央機敲一行核准:

# 1. 先發給金絲雀(測試台)試水溫
.\Publish-Cert.ps1 -Id "example.com" -Channel released-canary

# 2. 測試沒問題,全數正式發布!
.\Publish-Cert.ps1 -Id "example.com" -Channel released

# 3. 泡杯咖啡,看大家換好了沒
.\Get-CertStatus.ps1

💡 為什麼要寫這個?解決什麼痛點?

現在公開憑證效期被砍到 90 天(未來甚至可能縮短到 47 天),管十幾台 IIS 的人光是每個月登入遠端桌面手動換憑證就飽了:

  1. 不用開 WinRM / SSH:很多內網資安嚴格禁止中央主機橫向連線。改用 Pull 模式,各台 IIS 用自己的身分定時去共用資料夾「領取」,完全不用開危險的遠端連接埠。
  2. 不用在每台主機寫死帳號密碼:排程以 Windows 原生 SYSTEM 跑,存取共用資料夾會自動帶該機器的 AD 電腦帳號(DOMAIN\HOST$),完全免帳密。
  3. 不會自動搞掛正式站(金絲雀機制):簽發好只會放在 staging\,一定要管理者手動下指令核准才發布,還能分批先給 Canary 測試台。
  4. 換綁定失敗「自動回滾」:IIS 換 Binding 最怕改到一半壞掉導致網站離線。腳本只要發現換綁出錯,會立刻全部退回舊憑證,並在共用資料夾留下錯誤紀錄。

🏗️ 運作架構

中央簽發機 (Windows)           共用資料夾 (SMB)                   每台 IIS 主機
 ┌──────────────┐  Export-Cert   ┌───────────────────┐  Pull-Cert  ┌──────────────┐
 │ win-acme 或  │ ────────────▶ │ staging\<id>      │             │ 本機排程     │
 │ 廠商給的 PFX │                │   │ Publish-Cert  │ ◀────────── │ (SYSTEM 執行)│
 └──────────────┘               │    ▼  (管理者核准) │   發現新版   │ 每天看一次   │
                                │ released-canary\  │   ────────▶ │ 匯入→換綁定  │
                                │ released\         │              │ 失敗自動回滾 │
                                │ status\<host>.json│ ◀────────── └──────────────┘
                                └───────────────────┘   Get-CertStatus 彙整

  • 簽發:中央機跑 win-acme 自動續簽(支援 Let's Encrypt 或商用 Sectigo 等 EAB CA);**若你習慣手動跟廠商買 PFX,也可以直接丟進 staging\**。
  • 核准:管理者跑 Publish-Cert.ps1,把憑證推到 released\。
  • 領取:IIS 排程時間到自動抓取、匯入本機憑證庫、把舊的 HTTPS 繫結安全換成新憑證。

📋 系統需求

  • IIS 伺服器:Windows Server 2016 / 2019 / 2022(PowerShell 5.1)。
  • 檔案伺服器:任意 Windows 共用資料夾(SMB)。
  • 中央簽發機:任一台能連外網申請憑證的 Windows 主機(裝 win-acme),若手上已有向 CA 買好的現成 PFX 亦可手動放置。

📁 檔案說明

腳本路徑 執行位置 做什麼事
windows/Install-Agent.ps1 每台 IIS 設定並建立本機定時拉取排程(只需跑一次)
windows/Pull-Cert.ps1 每台 IIS 排程真正執行的核心:比對、匯入、換綁定、回滾與狀態回報
windows/Publish-Cert.ps1 中央管理員 手動核准發布憑證(推到 canary 或正式 released)
windows/Get-CertStatus.ps1 中央管理員 一鍵查看所有 IIS 主機目前是最新、更新中還是失敗
windows/Export-Cert.ps1 中央簽發機 win-acme 簽完自動打包進 staging(選配)

🔒 資安貼心提醒

  1. 共用資料夾權限請收緊:PFX 檔等同私鑰,請務必在 NTFS 權限中設定「只有 IIS 電腦帳號群組」可讀,中央機可寫,不要直接開 Everyone。
  2. 密碼與設定檔別上傳 Git:*.psd1、PFX 與密碼檔皆已加入 .gitignore,請勿推進版本控制。
  3. 詳細設定步驟、網域權限設定與深入架構說明,請參考 docs/ 目錄。

🕒 推薦排程時間配置

憑證多半是 90 天到期,建議以 「每個月跑 1 次」 為原則,避開跨日備份與上班巔峰期:

主機角色 建議執行頻率 建議時間點 為什麼這樣設?
中央簽發機 (win-acme) 每月 1 號 凌晨 02:00 win-acme 自動續簽。只會在「效期小於 30 天」時才真正向 CA 申請並打包進 staging\,不會頻繁消耗發證次數。
Canary 測試機 (測試台 IIS) 每月 5 號 凌晨 03:00 管理者核准推到 released-canary\ 後,測試台自動拉取並換綁。留 5 天觀察期確認站台服務與連線是否正常。
Production 正式機 (正式台 IIS / ERP) 每月 10 號 凌晨 03:00 測試沒問題,管理者推到 released\。正式機分批或在非上班時段自動拉取更新,出事也能在清晨直接回滾。

實作時的 3 個排程小細節(防呆提醒)

  1. 避免所有 IIS 在同一秒湧入 SMB 如果手上有 20 台以上的 IIS / ERP,排程建議勾選 Windows 內建的 「延遲工作最多達(隨機延遲): 15 分鐘」(Random Delay),讓主機在 03:00 ~ 03:15 之間分散去讀共用資料夾,避免瞬間打滿 SMB 連線。
  2. **執行身分唯一指名:NT AUTHORITY\SYSTEM** 建立排程時,不要用個人網域帳號(密碼過期排程就暴斃),務必指定本機 SYSTEM,這樣連線 SMB 時才會自動帶該主機的電腦帳號(DOMAIN\HOST$)。
  3. 無新版本不重複換綁 Pull-Cert.ps1 本身有比對 Thumbprint 機制,如果共用資料夾裡的憑證指紋跟目前 IIS 綁定的一模一樣,腳本會直接 Exit 0,不會每次執行都無謂地重置 IIS 綁定。

授權

MIT License © 2026 Kerr (kerr20801).

About

No description, website, or topics provided.

Resources

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages