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

如何在SQL的WinHttp.WinHttpRequest HTTPS请求中忽略SSL错误(0x80072F7D)

解决SQL中WinHttp.WinHttpRequest发送HTTPS请求时的SSL错误(0x80072F7D)

错误原因分析

0x80072F7D对应WININET_E_INVALID_CA,核心问题是目标服务器的SSL证书颁发机构(CA)未被SQL Server所在服务器的系统信任,或证书本身存在无效情况(如自签名、名称不匹配、过期等)。

具体解决步骤

1. 验证证书信任状态

在SQL Server运行的服务器上,用浏览器打开目标HTTPS地址,确认是否出现证书警告:

  • 若有警告,将证书的根CA导入至服务器本地计算机的「受信任根证书颁发机构」存储(不要导入到当前用户存储,因为SQL Server服务通常以本地系统或专用账户运行)。

2. 修正WinHttpRequest选项设置逻辑

你使用的13056(十六进制&H3300)对应WinHttpRequestOption_SslErrorIgnoreFlags,用于忽略指定SSL错误,但必须保证设置顺序正确:先设置选项,再调用Open方法。正确代码示例:

DECLARE @win INT, @hr INT
-- 创建WinHttpRequest实例
EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @win OUT
-- 先设置SSL错误忽略选项(仅测试环境建议,生产环境谨慎使用)
EXEC @hr = sp_OASetProperty @win, 'Option', 13056, 4
-- 再初始化请求
EXEC @hr = sp_OAMethod @win, 'Open', NULL, 'GET', 'https://你的目标地址', 0
-- 发送请求
EXEC @hr = sp_OAMethod @win, 'Send'
-- 后续处理响应(略)

注意:若目标是自签名证书,需确保使用WinHttp.WinHttpRequest.5.1版本,旧版本对自签名证书支持有限。

3. 检查SQL Server服务账户权限

SQL Server服务运行的账户可能无证书存储访问权限:

  • 打开mmc,添加「证书」管理单元并选择「本地计算机」;
  • 找到导入的根CA,右键→所有任务→管理权限,添加SQL Server服务账户并赋予读取权限。

4. 生产环境替代方案:使用SQLCLR

OLE Automation的WinHttpRequest在SSL场景下限制较多,生产环境建议用SQLCLR创建自定义存储过程/函数,通过.NET的HttpClient发送请求——.NET对证书信任的处理更灵活,调试也更方便。

内容的提问来源于stack exchange,提问作者Maciej Rubinkiewicz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:42:39