Windows Server 2016中PowerShell curl访问URL报WebCmdletWebResponseException
问题分析
Windows Server 2016 中的 PowerShell 默认依赖的 .NET Framework 版本(通常为4.x)未默认启用 TLS 1.2,尽管系统本身支持该协议。直接访问 S3 URL 正常,是因为 AWS S3 的 TLS 套件配置兼容旧系统的默认协议/套件组合;而你的 Nginx 反向代理可能配置了更严格的 TLS 套件,导致仅支持 TLS 1.0/1.1 的请求无法建立连接。
解决方案
1. 强制 PowerShell 使用 TLS 1.2
在执行 Invoke-WebRequest 前,先运行以下命令修改当前会话的安全协议:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
若需临时兼容其他协议(仅用于测试),可组合多个协议类型:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls
注意:该设置仅对当前 PowerShell 会话生效,若要永久生效,需修改注册表或组策略强制 .NET Framework 默认使用 TLS 1.2。
2. 调整 Nginx 的 TLS 套件配置
如果强制 TLS 1.2 后仍报错,需确认 Nginx 的 ssl_ciphers 配置是否包含 Windows Server 2016 支持的加密套件。建议配置兼容旧系统的套件组合,例如:
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA;
修改后重启 Nginx 服务,再测试连接。
3. 验证 TLS 连接兼容性
使用以下命令测试域名的 TLS 1.2 连接情况:
# 测试端口连通性及 TLS 握手细节 Test-NetConnection -ComputerName your-domain.com -Port 443 -InformationLevel Detailed
若有 OpenSSL 工具,也可通过以下命令确认:
openssl s_client -connect your-domain.com:443 -tls1_2
若握手失败,说明 Nginx 端的 TLS 配置确实存在兼容性问题。
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

