如何用win-acme生成通配符证书并部署于所有IIS站点(含新增)
实现Let's Encrypt通配符证书批量部署到所有IIS站点(含未来新增站点)
1. 先获取通配符证书并导入Windows证书存储
不要直接通过--installation iis指定单个站点,先把证书导入到IIS通用的证书存储位置,为后续批量部署做准备:
wacs --source manual --host *.mydomain.com --validation route53 --route53accesskeyid <mykey> --route53secretaccesskey <mysecret> --accepttos --emailaddress admin@mydomain.com --verbose --test --installation store --storename WebHosting --storelocation LocalMachine
执行完成后,证书会存入本地计算机 > WebHosting证书存储,这是IIS默认读取证书的常用位置。
2. 批量部署到所有现有IIS站点
使用PowerShell脚本遍历所有站点,更新现有HTTPS绑定的证书,未配置HTTPS的站点自动添加绑定:
# 获取通配符证书的指纹 $certThumbprint = (Get-ChildItem -Path Cert:\LocalMachine\WebHosting | Where-Object { $_.Subject -match "CN=*.mydomain.com" }).Thumbprint # 遍历所有IIS站点 foreach ($site in Get-IISSite) { # 更新现有HTTPS绑定的证书 foreach ($binding in $site.Bindings | Where-Object { $_.Protocol -eq "https" }) { $binding.CertificateHash = $certThumbprint $binding.CertificateStoreName = "WebHosting" $binding.Update() } # 若站点无HTTPS绑定,自动添加 if (-not ($site.Bindings | Where-Object { $_.Protocol -eq "https" })) { New-IISSiteBinding -Name $site.Name -BindingInformation "*:443:" -Protocol https -CertificateThumbprint $certThumbprint -CertificateStoreName WebHosting } }
运行脚本前,确保已安装IISAdministration模块,可通过Install-Module -Name IISAdministration完成安装。
3. 自动部署到未来新增站点
要让后续新建站点自动使用该通配符证书,可通过两种方式实现:
- 设置IIS默认绑定模板:打开IIS管理器,点击服务器节点进入「站点绑定」,添加一个HTTPS绑定并选择通配符证书,后续新建站点时会默认继承该模板(部分IIS版本支持)。
- 配置证书续期自动同步:在wacs的续期任务中添加post-renewal脚本,每次证书更新后自动重新运行上述PowerShell脚本,确保所有站点(含新创建的)同步使用最新证书。操作方式为在wacs配置目录(默认
C:\ProgramData\win-acme)中找到对应续期任务,添加Script类型的部署步骤,指向你的PowerShell脚本路径。
关键注意事项
- 通配符证书必须使用DNS验证(你选择的Route53是正确方案),HTTP验证无法生成通配符证书。
- 避免直接指定
installationsiteid,该参数仅针对单个站点,不符合批量部署需求。
内容的提问来源于stack exchange,提问作者Appleoddity
相关产品推荐
相关产品推荐

