PowerShell 是管理 Windows 证书存储最直接、最可控的工具,支持续期、分发、协同ACME客户端及安全策略适配,全程无需图形界面,可嵌入自动化流程实现“一次配置、长期有效”。
powershell 是管理 windows 证书存储最直接、最可控的工具,尤其适合在 vps 或域环境中批量处理证书续期与分发。它不依赖图形界面,可嵌入自动化流程,配合任务计划或事件触发,真正实现“一次配置、长期有效”。
证书续期:用 PowerShell 触发并验证更新
Windows 自带的 Certutil 和 CertificateProvider(Cert:\ 驱动)已深度集成进 PowerShell,无需额外安装即可完成核心操作:
- 列出即将过期的证书(30 天内):
Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) -and $_.NotAfter -gt (Get-Date) } - 自动续订 AD CS 签发的证书(需有相应权限):
certutil -renewCert "CN=WebServer01" -config "CA01\MyEnterpriseCA" - 导出新证书为 PFX(含私钥,供 IIS 或其他服务使用):
Export-PfxCertificate -Cert "Cert:\LocalMachine\My\THUMBPRINT" -FilePath C:\certs\web.pfx -Password (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force)
证书分发:跨服务器同步与批量部署
单台服务器续期只是起点;生产环境常需将新证书推送到多台 IIS、RDP 或应用服务器。PowerShell 远程处理(WinRM)+ 证书存储操作可闭环完成:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 将本地证书导入远程服务器的 LocalMachine\My 存储:
Invoke-Command -ComputerName Web02 -ScriptBlock { param($pfxPath, $pwd) Import-PfxCertificate -FilePath $pfxPath -CertStoreLocation Cert:\LocalMachine\My -Password $pwd } -ArgumentList "C:\certs\web.pfx", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) - 自动绑定到 IIS 站点(需提前安装 WebAdministration 模块):
Set-WebBinding -Name "Default Web Site" -BindingInformation "*:443:" -PropertyName CertificateHash -Value "THUMBPRINT" -Protocol https - 批量清理旧证书(按颁发者或过期时间):
Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Issuer -match "Let's Encrypt" -and $_.NotAfter -lt (Get-Date).AddDays(-7) } | Remove-Item
与 win-acme / Certbot 协同工作
PowerShell 不替代 ACME 客户端,而是作为其“最后一公里”的执行引擎。例如 win-acme 完成 Let's Encrypt 续期后,证书默认存于 %ProgramData%\win-acme\https\,此时可用 PowerShell 做后续动作:
- 读取最新证书路径并导入系统存储:
$latest = Get-ChildItem "$env:ProgramData\win-acme\https\*" -Filter "*.pfx" | Sort-Object LastWriteTime -Descending | Select-Object -First 1; Import-PfxCertificate -FilePath $latest.FullName -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString "default" -AsPlainText -Force) - 触发 IIS 重载绑定(避免手动重启):
netsh http flush sslcert && iisreset /noforce(或更轻量的Restart-WebItem -Name "Default Web Site") - 记录日志并发送通知:
Write-EventLog -LogName Application -Source "CertAutoDeploy" -EntryType Information -EventId 100 -Message "Certificate deployed to Web01 at $(Get-Date)"
安全提醒:避免常见权限与策略陷阱
自动化过程失败,80% 源于权限或策略配置不当:
- 运行脚本的服务账户必须拥有
Cert:\LocalMachine\My的“读取+写入+管理私钥”权限,否则Import-PfxCertificate会静默失败 - 若启用了“设备防护”或“基于虚拟化的安全性(VBS)”,某些密钥操作会被拦截,需检查
Get-CimInstance Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard - 企业组策略中若启用“禁止导出私钥”,则
Export-PfxCertificate将报错 —— 此时应改用Certutil -exportPFX并确保账户有证书模板的“管理证书”权限 - 在非交互式上下文(如计划任务)中使用
ConvertTo-SecureString时,不能依赖-AsPlainText(仅限测试),推荐用Get-Credential预存加密凭据或 Azure Key Vault 托管密码

















