[PowerShell] 批量更新 IIS SSL 憑證教學 (V3 版:函數化自動更新腳本)

這篇是 PowerShell 自動化更新 IIS SSL 憑證 V3 版的存檔教學。雖然目前已釋出更安全的 V6 版,但本篇展示了基礎的「函數化封裝」邏輯,包含如何下載 PFX、讀取密碼、更新綁定與腳本自我刪除的完整流程,適合初學者學習 PowerShell 模組化設計。
📝 前言:
💡 系列導讀:這是 V3 版本腳本存檔。
如果您還沒看過加密金鑰的產生方式,請先參考 V6 加密篇

🚀 新版發布:IIS SSL 自動化腳本 V6 (完整版)

您目前觀看的是 V3 存檔版。為了提升腳本結構與維護性,我已釋出最新的 V6 完整版,整合了 AES 加密與更完善的流程控制,強烈建議參考新版。

👉 點此前往:[PowerShell] IIS SSL 憑證自動更新全攻略 (V6)

1. 腳本 10 大核心功能說明

這個 PowerShell 腳本專為 IIS 伺服器設計,實現了全自動化的 SSL 憑證更新:

  1. 下載 PFX 密碼: 從指定 URL 讀取 PFX 的解鎖密碼。
  2. 下載憑證檔案: 自動將遠端 PFX 下載至本地暫存目錄。
  3. 匯入憑證存儲區: 匯入至「本機電腦」的「個人 (My)」存放區,並自動提取 指紋 (Thumbprint)
  4. 資訊獲取: 自動枚舉所有 IIS 網站並顯示目前綁定狀態。
  5. 更新 SSL 綁定: 比對新舊指紋,一鍵替換所有 443 Port 的 HTTPS 綁定。
  6. 完整性校驗: 腳本會再次檢查所有站台,確保綁定已切換到新憑證。
  7. 清理暫存檔: 安裝完成後自動刪除本地下載的 PFX 檔案。
  8. 憑證清理: 查找並刪除已失效的舊憑證,保持系統精簡。
  9. 重啟服務: 重新啟動 W3SVC 服務以確保配置生效。
  10. 腳本自毀: 工作結束後自動刪除 PS1 腳本,避免敏感資訊殘留。

2. [程式碼] 函數化自動更新腳本 (V3)

請將以下內容存為 Update-IIS-Cert-V3.ps1 並以系統管理員權限執行:

# 設置環境變數 $PFX_FILE_URL = "http://192.168.1.1/123.pfx" $PASSWORD_URL = "http://192.168.1.1/password.txt" $TEMP_PFX_PATH = "C:\temp\123.pfx" $SSL_BINDING_IPPORT = "0.0.0.0:443" # --- 核心函數區 --- function Get-PfxPassword { Write-Host "正在從 URL 下載讀取憑證密碼..." -ForegroundColor Cyan try { $response = Invoke-WebRequest -Uri $PASSWORD_URL if ($response.StatusCode -eq 200) { $PFX_PASSWORD = [System.Text.Encoding]::UTF8.GetString($response.Content).Trim() Write-Host "已成功讀取憑證密碼。" -ForegroundColor Green return $PFX_PASSWORD } else { exit 1 } } catch { exit 1 } } function Download-PfxFile { Write-Host "正在下載 PFX 檔案..." Invoke-WebRequest -Uri $PFX_FILE_URL -OutFile $TEMP_PFX_PATH } function Import-PfxAndGetThumbprint { param ([string]$pfxPath, [string]$password) Write-Host "正在匯入憑證並取得指紋..." $cert = Import-PfxCertificate -FilePath $pfxPath -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString $password -AsPlainText -Force) return $cert.Thumbprint } function Update-SslBinding { param ([string]$oldThumbprint, [string]$newThumbprint) Write-Host "正在更新 IIS SSL 綁定..." -ForegroundColor Cyan Get-WebBinding | Where-Object { $_.certificateHash -eq $oldThumbprint } | ForEach-Object { $_.RemoveSslCertificate() $_.AddSslCertificate($newThumbprint, 'My') Write-Host "已更新綁定: $_" -ForegroundColor Green } } # --- 主程式執行流 --- try { $PFX_PASSWORD = Get-PfxPassword Start-Sleep -Seconds 2 $sites = Get-Website $CertificateThumbprints = @() # 獲取目前指紋清單 foreach ($site in $sites) { $bindings = Get-WebBinding -Name $site.Name -Port 443 -Protocol "https" -ErrorAction SilentlyContinue foreach ($b in $bindings) { $CertificateThumbprints += $b.CertificateHash } } Download-PfxFile $newThumb = Import-PfxAndGetThumbprint -pfxPath $TEMP_PFX_PATH -password $PFX_PASSWORD Write-Host "新憑證指紋: $newThumb" -BackgroundColor Red -ForegroundColor Yellow # 執行替換 (假設以第一個發現的舊憑證為目標) Update-SslBinding -oldThumbprint $CertificateThumbprints[0] -newThumbprint $newThumb # 重新啟動服務 Restart-Service W3SVC -Force Write-Host "IIS 服務重啟完成。" -ForegroundColor Green # 清理環境 Remove-Item $TEMP_PFX_PATH -Force } catch { Write-Host "發生錯誤: $_" -ForegroundColor Red } # 執行自我刪除 $currentPath = $MyInvocation.MyCommand.Path if ($currentPath) { Write-Host "自動化腳本執行完畢,準備自毀..." -ForegroundColor Cyan Start-Sleep -Seconds 3 Remove-Item -Path $currentPath -Force }

📚 參考資源

🏷️ 文章標籤 (Tags)

留言

自訂樣式 ~ CSS -- 簡約相簿

© Copyright 2021 Design By 灰鴿 | Modified by Sungshu ( Powered by Blogger )