外观
Windows Server 关闭 TLS 1.1 协议完整指南
TLS 1.1 协议使用了脆弱的加密算法,存在重大安全漏洞,容易受到降级攻击的严重影响。为了提升服务器安全性,建议在 Windows Server 上禁用 TLS 1.1 协议,仅保留更安全的 TLS 1.2 和 TLS 1.3。
为什么需要关闭 TLS 1.1?
安全风险
- ⚠️ 脆弱加密算法:TLS 1.1 使用的加密算法存在已知漏洞
- ⚠️ 降级攻击风险:攻击者可能强制服务器降级到不安全的协议版本
- ⚠️ 合规要求:许多安全标准和合规框架(如 PCI DSS)要求禁用 TLS 1.1
- ⚠️ 浏览器支持:现代浏览器已逐步停止支持 TLS 1.1
推荐配置
- ✅ 启用:TLS 1.2、TLS 1.3
- ❌ 禁用:TLS 1.0、TLS 1.1、SSL 2.0、SSL 3.0
方法一:通过注册表编辑器(推荐)
步骤 1:打开注册表编辑器
- 按
Win + R打开运行对话框 - 输入
regedit并按回车 - 如果出现 UAC 提示,点击"是"以管理员权限运行
步骤 2:导航到 TLS 配置路径
在注册表编辑器中,导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols步骤 3:创建协议文件夹结构
如果 Protocols 文件夹下没有以下子文件夹,需要手动创建:
TLS 1.1 文件夹结构:
TLS 1.1ClientServer
创建方法:
- 右键点击
Protocols文件夹 - 选择"新建" → "项"
- 命名为
TLS 1.1 - 在
TLS 1.1下创建Client和Server两个子项
- 右键点击
步骤 4:禁用 TLS 1.1
禁用 TLS 1.1 Client
- 导航到:
TLS 1.1\Client - 在右侧空白处右键,选择"新建" → "DWORD (32位)值"
- 命名为
Enabled - 双击
Enabled,将数值数据设置为0(0 = 禁用,1 = 启用) - 点击"确定"
禁用 TLS 1.1 Server
- 导航到:
TLS 1.1\Server - 在右侧空白处右键,选择"新建" → "DWORD (32位)值"
- 命名为
Enabled - 双击
Enabled,将数值数据设置为0 - 点击"确定"
步骤 5:重启服务器
重要:修改注册表后必须重启服务器才能生效。
# 在 PowerShell 中重启服务器
Restart-Computer -Force方法二:通过 PowerShell 脚本(自动化)
快速脚本
创建一个 PowerShell 脚本来自动完成配置:
# 禁用 TLS 1.1 - PowerShell 脚本
# 需要以管理员权限运行
# TLS 1.1 Client
$tls11ClientPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client"
if (!(Test-Path $tls11ClientPath)) {
New-Item -Path $tls11ClientPath -Force | Out-Null
}
New-ItemProperty -Path $tls11ClientPath -Name "Enabled" -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $tls11ClientPath -Name "DisabledByDefault" -Value 1 -PropertyType DWORD -Force | Out-Null
# TLS 1.1 Server
$tls11ServerPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"
if (!(Test-Path $tls11ServerPath)) {
New-Item -Path $tls11ServerPath -Force | Out-Null
}
New-ItemProperty -Path $tls11ServerPath -Name "Enabled" -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $tls11ServerPath -Name "DisabledByDefault" -Value 1 -PropertyType DWORD -Force | Out-Null
Write-Host "TLS 1.1 已禁用。请重启服务器使配置生效。" -ForegroundColor Green使用方法
- 将脚本保存为
disable-tls11.ps1 - 右键点击脚本文件,选择"使用 PowerShell 运行"
- 如果出现执行策略限制,先运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser- 然后再次运行脚本
- 重启服务器
完整配置脚本(推荐)
以下脚本可以同时配置 TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3:
# 完整的 TLS 协议配置脚本
# 禁用 TLS 1.0 和 TLS 1.1,启用 TLS 1.2 和 TLS 1.3
# 需要以管理员权限运行
function Set-TLSProtocol {
param(
[string]$Protocol,
[bool]$Enabled,
[bool]$DisabledByDefault
)
$clientPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$Protocol\Client"
$serverPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$Protocol\Server"
# Client 配置
if (!(Test-Path $clientPath)) {
New-Item -Path $clientPath -Force | Out-Null
}
New-ItemProperty -Path $clientPath -Name "Enabled" -Value ([int]$Enabled) -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $clientPath -Name "DisabledByDefault" -Value ([int]$DisabledByDefault) -PropertyType DWORD -Force | Out-Null
# Server 配置
if (!(Test-Path $serverPath)) {
New-Item -Path $serverPath -Force | Out-Null
}
New-ItemProperty -Path $serverPath -Name "Enabled" -Value ([int]$Enabled) -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $serverPath -Name "DisabledByDefault" -Value ([int]$DisabledByDefault) -PropertyType DWORD -Force | Out-Null
}
Write-Host "开始配置 TLS 协议..." -ForegroundColor Yellow
# 禁用 TLS 1.0
Set-TLSProtocol -Protocol "TLS 1.0" -Enabled $false -DisabledByDefault $true
Write-Host "✓ TLS 1.0 已禁用" -ForegroundColor Green
# 禁用 TLS 1.1
Set-TLSProtocol -Protocol "TLS 1.1" -Enabled $false -DisabledByDefault $true
Write-Host "✓ TLS 1.1 已禁用" -ForegroundColor Green
# 启用 TLS 1.2
Set-TLSProtocol -Protocol "TLS 1.2" -Enabled $true -DisabledByDefault $false
Write-Host "✓ TLS 1.2 已启用" -ForegroundColor Green
# 启用 TLS 1.3(如果系统支持)
Set-TLSProtocol -Protocol "TLS 1.3" -Enabled $true -DisabledByDefault $false
Write-Host "✓ TLS 1.3 已启用" -ForegroundColor Green
Write-Host "`n配置完成!请重启服务器使配置生效。" -ForegroundColor Yellow
Write-Host "重启命令: Restart-Computer -Force" -ForegroundColor Cyan方法三:通过组策略(适用于域环境)
如果服务器加入了 Active Directory 域,可以使用组策略统一管理:
步骤 1:打开组策略管理编辑器
- 打开"组策略管理"(Group Policy Management)
- 创建新的 GPO 或编辑现有 GPO
- 导航到:
计算机配置→管理模板→网络→SSL 配置设置
步骤 2:配置 SSL 密码套件顺序
- 双击"SSL 密码套件顺序"
- 选择"已启用"
- 在密码套件列表中,移除包含 TLS 1.1 的套件
- 确保只保留 TLS 1.2 和 TLS 1.3 的密码套件
步骤 3:应用组策略
# 强制刷新组策略
gpupdate /force验证配置
方法 1:使用 PowerShell 检查注册表
# 检查 TLS 1.1 Client 配置
$tls11Client = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -ErrorAction SilentlyContinue
if ($tls11Client) {
Write-Host "TLS 1.1 Client Enabled: $($tls11Client.Enabled)"
Write-Host "TLS 1.1 Client DisabledByDefault: $($tls11Client.DisabledByDefault)"
} else {
Write-Host "TLS 1.1 Client 配置不存在"
}
# 检查 TLS 1.1 Server 配置
$tls11Server = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -ErrorAction SilentlyContinue
if ($tls11Server) {
Write-Host "TLS 1.1 Server Enabled: $($tls11Server.Enabled)"
Write-Host "TLS 1.1 Server DisabledByDefault: $($tls11Server.DisabledByDefault)"
} else {
Write-Host "TLS 1.1 Server 配置不存在"
}方法 2:使用在线工具测试
使用以下在线工具测试服务器的 TLS 配置:
- SSL Labs SSL Test:https://www.ssllabs.com/ssltest/
- SSL Checker:https://www.sslshopper.com/ssl-checker.html
输入服务器域名或 IP,工具会显示支持的 TLS 版本。
方法 3:使用 Nmap 扫描
# 使用 Nmap 扫描 TLS 版本支持
nmap --script ssl-enum-ciphers -p 443 your-server.com方法 4:使用 OpenSSL 测试
# 测试 TLS 1.1 连接(应该失败)
openssl s_client -connect your-server.com:443 -tls1_1
# 测试 TLS 1.2 连接(应该成功)
openssl s_client -connect your-server.com:443 -tls1_2方法 5:使用 PowerShell 测试连接
# 测试 HTTPS 连接
$url = "https://your-server.com"
try {
$response = Invoke-WebRequest -Uri $url -UseBasicParsing
Write-Host "连接成功,状态码: $($response.StatusCode)" -ForegroundColor Green
} catch {
Write-Host "连接失败: $($_.Exception.Message)" -ForegroundColor Red
}常见问题解决
问题 1:修改注册表后未生效
原因:未重启服务器
解决:
# 必须重启服务器
Restart-Computer -Force问题 2:应用程序无法连接
原因:某些旧版应用程序可能依赖 TLS 1.1
解决:
- 检查应用程序日志
- 更新应用程序到支持 TLS 1.2 的版本
- 如果无法更新,考虑在特定应用程序中启用 TLS 1.1(不推荐)
问题 3:IIS 网站无法访问
原因:IIS 可能仍在使用旧配置
解决:
# 重启 IIS
iisreset
# 或重启 World Wide Web Publishing Service
Restart-Service W3SVC问题 4:注册表路径不存在
原因:Windows Server 版本不同,路径可能略有差异
解决:
- 确认 Windows Server 版本
- 手动创建所需的注册表项
- 使用 PowerShell 脚本自动创建(推荐)
问题 5:组策略覆盖注册表设置
原因:域组策略可能覆盖本地注册表设置
解决:
- 检查组策略设置
- 在组策略中统一配置
- 运行
gpupdate /force刷新策略
完整的安全配置建议
推荐的 TLS 配置
除了禁用 TLS 1.1,还建议:
- 禁用 TLS 1.0
- 禁用 SSL 2.0 和 SSL 3.0
- 启用 TLS 1.2(必需)
- 启用 TLS 1.3(如果系统支持)
密码套件配置
确保只使用强密码套件:
# 查看当前启用的密码套件
Get-TlsCipherSuite | Format-Table Name, CipherSuite其他安全建议
- 定期更新 Windows Server
- 启用 Windows 防火墙
- 配置安全的事件日志
- 使用强密码策略
- 定期进行安全审计
回滚配置
如果需要重新启用 TLS 1.1(不推荐):
方法 1:修改注册表
- 将
Enabled值改为1 - 将
DisabledByDefault值改为0 - 重启服务器
方法 2:使用 PowerShell
# 重新启用 TLS 1.1
$tls11ClientPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client"
$tls11ServerPath = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"
Set-ItemProperty -Path $tls11ClientPath -Name "Enabled" -Value 1
Set-ItemProperty -Path $tls11ClientPath -Name "DisabledByDefault" -Value 0
Set-ItemProperty -Path $tls11ServerPath -Name "Enabled" -Value 1
Set-ItemProperty -Path $tls11ServerPath -Name "DisabledByDefault" -Value 0
Restart-Computer -Force总结
关闭 TLS 1.1 是提升 Windows Server 安全性的重要步骤。关键要点:
- ✅ 使用注册表编辑器或 PowerShell 脚本禁用 TLS 1.1
- ✅ 必须重启服务器使配置生效
- ✅ 验证配置确保 TLS 1.1 已禁用
- ✅ 同时禁用 TLS 1.0,仅保留 TLS 1.2 和 TLS 1.3
- ✅ 定期检查服务器 TLS 配置
推荐操作流程:
# 1. 运行 PowerShell 脚本禁用 TLS 1.1
# (以管理员权限运行 disable-tls11.ps1)
# 2. 验证配置
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\*"
# 3. 重启服务器
Restart-Computer -Force
# 4. 使用在线工具验证(如 SSL Labs)按照本指南操作,你可以安全地关闭 Windows Server 上的 TLS 1.1 协议,提升服务器安全性。
相关资源:
贡献者
更新日志
2025/11/21 16:13
查看所有更新日志
2451f-docs(security): 添加 Windows Server 安全配置指南于
版权所有
版权归属:ntzw
许可证:CC0 1.0 通用 (CC0)
