IIS TLS 配置生成器(PowerShell)
生成一个 PowerShell 脚本:关闭旧协议、调整密码套件顺序、导入并绑定 PFX 证书、给 IIS 加上 HSTS。
浏览器本地运行 你输入的内容只在本地用 JavaScript 处理,不会上传到 ssl.sh。
TLS 配置生成器的 IIS 预设生成一个用于 Windows Server 的 PowerShell 脚本,它会设置 Schannel 接受哪些 SSL/TLS 版本、限制并排序密码套件、导入 PFX 证书、绑定到站点并加上 HSTS 头。用管理员身份运行 PowerShell 执行脚本,然后重启服务器。
示例:中级档(节选)
$base = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols'
function Set-Protocol([string]$Name, [bool]$Enabled) {
foreach ($side in 'Server', 'Client') {
$key = "$base\$Name\$side"
New-Item -Path $key -Force | Out-Null
New-ItemProperty -Path $key -Name 'Enabled' -Value ([int]$Enabled) -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $key -Name 'DisabledByDefault' -Value ([int](-not $Enabled)) -PropertyType DWord -Force | Out-Null
}
}
Set-Protocol 'SSL 3.0' $false
Set-Protocol 'TLS 1.0' $false
Set-Protocol 'TLS 1.1' $false
Set-Protocol 'TLS 1.2' $true
Set-Protocol 'TLS 1.3' $true
$suites = @('TLS_AES_256_GCM_SHA384', 'TLS_AES_128_GCM_SHA256',
'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256')
Get-TlsCipherSuite | Where-Object { $suites -notcontains $_.Name } | ForEach-Object { Disable-TlsCipherSuite -Name $_.Name }
生成的完整脚本还会导入 C:\certs\example.com.pfx、创建带 SNI 的 https 绑定,并添加 Strict-Transport-Security。
国内环境说明
- 阿里云、腾讯云下载的 IIS 证书包里是
.pfx和一个密码 txt 文件,可以直接给脚本用(运行时会提示输入密码)。手上只有 PEM 文件的,用 PEM 转 PFX 转换;Windows Server 2016 要勾选兼容模式。 - 等保测评和安全扫描常要求关闭 TLS 1.0/1.1 和弱密码套件,这个脚本正好覆盖这两项。
要求
- Windows Server 2016 或更新版本,IIS 10。TLS 1.3 需要 Windows Server 2022+。
- TLS PowerShell 模块(Windows Server 2016 及以后自带),用于密码套件相关命令。
- 带私钥和证书链的 PFX 文件。
运行之后
- 重启 Windows:Schannel 在启动时读取协议设置。
- 用 SSL 检查测试站点,确认 TLS 1.0/1.1 被拒绝。
- 如果某个程序连不上老服务器了,只重新打开对应协议的 Client 端。
常见错误
- “提供给程序包的凭据未被识别”:证书导入时没有带上私钥,或者应用程序池账号读不了私钥。
- 返回了错误的证书:同一 IP 上另一个没有 SNI 的绑定优先了。所有 https 绑定都用
-SslFlags 1(SNI)。
常见问题
关闭 TLS 1.0/1.1 会影响别的东西吗?
这些设置对整台机器生效,包括 .NET 程序、SQL Server 客户端发起的出站连接。老的 .NET Framework 程序可能需要设置 SchUseStrongCrypto,建议先在测试服务器上验证。
Windows Server 2019 能用 TLS 1.3 吗?
不能。Schannel 从 Windows Server 2022 和 Windows 11 开始支持 TLS 1.3。2019 上用中级档,实际只会提供 TLS 1.2。
IIS 有原生的 HSTS 设置吗?
IIS 10.0 版本 1709 及以后,每个站点有 hsts 配置元素。脚本用的是自定义响应头,所有 IIS 版本都适用。