TLS 配置生成

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 文件。

运行之后

  1. 重启 Windows:Schannel 在启动时读取协议设置。
  2. 用 SSL 检查测试站点,确认 TLS 1.0/1.1 被拒绝。
  3. 如果某个程序连不上老服务器了,只重新打开对应协议的 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 版本都适用。

资料来源

  1. Microsoft: TLS registry settings
  2. Mozilla Server Side TLS