Server 2012 R2下Invoke-WebRequest无法创建SSL/TLS安全通道问题求解
遗漏配置排查点
1. 补充SCHANNEL协议启用配置
你当前仅配置了DisabledByDefault=0,还需为TLS 1.1/1.2的客户端侧新增Enabled=1的注册表项,配置命令如下:
# 启用TLS 1.1客户端支持 New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client' -Name 'Enabled' -Value 1 -PropertyType DWord -Force # 启用TLS 1.2客户端支持 New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled' -Value 1 -PropertyType DWord -Force
配置完成后需重启服务器生效。
2. 安装必要系统补丁
Server 2012 R2原生不支持目标站点启用的GCM类TLS密码套件,需先安装对应补丁:
- 安装KB3161606补丁,新增对
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384等GCM密码套件的支持 - 安装KB3140245补丁,让WinHttp组件支持
DefaultSecureProtocols注册表配置项,你之前设置的2560值才会生效
注:目标站点使用的TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256套件Server 2012 R2全版本都不支持,只要保证前两个GCM套件可用即可正常协商。
3. 调整密码套件优先级
补丁安装完成后,需将上述两个GCM套件调整到系统密码套件优先级的前列:
- 运行
gpedit.msc打开本地组策略编辑器 - 依次进入
计算机配置 > 管理模板 > 网络 > SSL配置设置 - 双击
SSL密码套件顺序,选择已启用,将TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384放在优先级列表的最前面,多个套件用逗号分隔 - 保存配置后重启服务器生效
4. 配置.NET Framework强加密
PowerShell的Invoke-WebRequest依赖.NET Framework的安全配置,需开启.NET的强加密支持,执行以下命令配置:
# 64位.NET 4.x强加密配置 New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value 1 -PropertyType DWord -Force # 32位.NET 4.x强加密配置 New-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value 1 -PropertyType DWord -Force
5. 排查FIPS与证书相关问题
- 你已启用FIPS算法,可临时关闭FIPS组策略验证是否是FIPS阻止了对应密码套件的协商,部分GCM套件在Server 2012 R2的FIPS模式下兼容存在问题
- 验证目标站点的SSL根证书是否已导入到服务器的
受信任的根证书颁发机构存储中,可直接用IE访问目标站点地址看是否有证书报错 - 可临时关闭证书吊销检查验证:在调用
Invoke-WebRequest前添加[System.Net.ServicePointManager]::CheckCertificateRevocationList = $false,同时可添加跳过证书校验的回调代码排除证书信任问题
内容的提问来源于stack exchange,提问作者Joseph Willcoxson
相关产品推荐
相关产品推荐

