You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.7.2 Web API集成Stripe SDK时SSL/TLS安全通道创建失败

.NET 4.7.2 Web API部署后Stripe请求SSL/TLS通道创建失败的排查方案

问题背景

我有一个基于.NET 4.7.2框架的Web API,集成了Stripe SDK 40.5.0,本地运行正常,但部署到服务器后出现如下错误:

System.Net.Http.HttpRequestException: 发送请求时出错。 ---> System.Net.WebException: 请求已中止: 无法创建SSL/TLS安全通道。
at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)

服务器已配置TLS 1.2,尝试了两种设置ServicePointManager.SecurityProtocol的方式,均未解决问题:

尝试的代码1

var customers = new CustomerService();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var result = customers.Create(customer);

尝试的代码2

var customers = new CustomerService();
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;
var result = customers.Create(customer);

两种方式均触发相同错误:

请求已中止: 无法创建SSL/TLS安全通道。

服务器SSL检测结果为A+,寻求问题排查建议。


排查与解决方案

1. 调整ServicePointManager设置时机

.NET 4.7+默认会自动适配系统配置的TLS版本,但手动设置时必须确保代码在所有HTTP请求发起前执行。你当前的设置放在CustomerService.Create之前,若Stripe SDK内部已提前初始化HTTP客户端,该配置可能不生效。

建议将配置移到应用启动的最早期,比如Global.asax的Application_Start方法中:

protected void Application_Start()
{
    // 仅启用安全的TLS版本,禁用过时协议
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
    // 其他初始化代码...
}

2. 检查服务器密码套件支持

Stripe要求使用现代密码套件,即使服务器启用了TLS 1.2,若缺少Stripe兼容的套件,仍会导致握手失败:

  • 打开服务器本地组策略编辑器(gpedit.msc)
  • 导航到计算机配置 > 管理模板 > 网络 > SSL配置设置
  • 启用SSL密码套件顺序,确保包含TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256等现代套件
  • 重启服务器使设置生效

3. 验证根证书完整性

Stripe API依赖受信任的根证书颁发机构,若服务器缺失对应根证书,会导致SSL验证失败:

  • 打开服务器证书管理器(certmgr.msc)
  • 检查受信任的根证书颁发机构中是否包含DigiCert Global Root G2等Stripe使用的根证书
  • 若缺失,从官方渠道下载并安装对应证书

4. 排查代理/防火墙拦截

服务器的代理或防火墙可能拦截HTTPS请求或修改SSL握手流程:

  • 临时关闭防火墙测试请求是否正常
  • 确认代理服务器允许访问Stripe API域名
  • 检查代理是否存在中间人攻击(如使用自签名证书)

5. 升级Stripe SDK版本

你使用的40.5.0版本较旧,可能存在与.NET 4.7.2或服务器环境的兼容性问题,建议升级到最新稳定版本,新版本通常会修复SSL相关兼容问题。

6. 启用SSL日志定位详细错误

通过启用SSL日志获取更精准的失败原因:

  • 打开注册表编辑器,导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
  • 创建EventLogging键,设置DWORD值为0x00000007(记录所有SSL事件)
  • 重启服务器后,查看事件查看器的系统日志,找到Schannel相关错误条目分析具体原因

内容的提问来源于stack exchange,提问作者Emaad Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:39:20