[PowerShell] 批量更新 IIS SSL 憑證教學 (V1 版:基礎自動化腳本)
這篇是 PowerShell 自動化更新 IIS SSL 憑證 V1 版的存檔教學。雖然目前已釋出更安全的 V6 版,但本篇展示了如何透過網路下載密碼、自動匯入 PFX 憑證以及使用 netsh 指令更新綁定的早期實作邏輯,適合研究 PowerShell 自動化歷程。
延伸閱讀猜你對這些文章也有興趣:
📝 前言:
💡 系列導讀:這是 V1 版本腳本存檔。
多台伺服器要手動更新 SSL 憑證實在太累人了,使用 PowerShell 來一鍵完成更為實際。本版本實現了從遠端下載 PFX 並自動重新綁定 IIS 站台的功能。
🚀 新版發布:IIS SSL 自動化腳本 V6 (完整版)
您目前觀看的是 V1 基礎版 教學。為了提升安全性與自動化穩定度,我已釋出最新的 V6 完整版,整合了 AES 加密與自動解密流程,建議前往觀看。
👉 點此前往:[PowerShell] IIS SSL 憑證自動更新全攻略 (V6)1. 操作流程說明
這個腳本會依序執行以下關鍵步驟:
- 獲取 SSL 綁定資訊: 取得目前的憑證指紋 (Thumbprint)。
- 下載 PFX 憑證: 從指定的內部網址下載新憑證。
- 匯入本機存放區: 將 PFX 匯入至 LocalMachine\My。
- 更新綁定: 使用
netsh強制更新 SSL 綁定。 - 清理與重啟: 刪除舊憑證檔案並重新啟動 IIS 服務。
2. [程式碼] IIS 憑證自動更新腳本 (V1)
請將以下程式碼存為 Update-IIS-Cert-V1.ps1 並以系統管理員權限執行:
# 設置變數環境
$PFX_FILE_URL = "http://192.168.1.1.123.pfx"
$PFX_PASSWORD = "W123456122"
$TEMP_PFX_PATH = "C:\temp\123.pfx"
$SSL_BINDING_IPPORT = "0.0.0.0:443"
$SSL_APP_ID = "{4dc3e181-e14b-4a21-b022-59fc669b0914}"
# 1. 獲取目前 IIS 站台資訊
$sites = Get-Website
$CertificateThumbprints = @()
foreach ($site in $sites) {
Write-Host "站台: $($site.Name)"
$bindings = Get-WebBinding -Name $site.Name -Port 443 -Protocol "https" -ErrorAction SilentlyContinue
if ($bindings) {
foreach ($binding in $bindings) {
Write-Host " 憑證指紋: $($binding.CertificateHash)"
$CertificateThumbprints += $binding.CertificateHash
}
}
}
# 2. 下載 PFX 檔案
Write-Host "正在下載 PFX 檔案..."
Invoke-WebRequest -Uri $PFX_FILE_URL -OutFile $TEMP_PFX_PATH
# 3. 匯入憑證
Write-Host "正在匯入憑證..."
$cert = Import-PfxCertificate -FilePath $TEMP_PFX_PATH -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString $PFX_PASSWORD -AsPlainText -Force)
$thumbprint = $cert.Thumbprint
Write-Host "新憑證指紋: $thumbprint"
# 4. 使用 netsh 更新 SSL 綁定
Write-Host "執行 netsh 更新綁定..."
try {
Invoke-Expression "netsh http delete sslcert ipport=$SSL_BINDING_IPPORT" | Out-Null
Invoke-Expression "netsh http add sslcert ipport=$SSL_BINDING_IPPORT certhash=$thumbprint appid=$SSL_APP_ID" | Out-Null
} catch {
Write-Host "更新綁定發生錯誤: $_" -ForegroundColor Red
}
# 5. 清理舊憑證與重啟服務
Write-Host "正在刪除舊憑證並重啟 IIS..."
Restart-Service W3SVC -Force
Remove-Item $TEMP_PFX_PATH -Force
Write-Host "操作完成。"
留言
張貼留言