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

Delphi使用Indy访问宝马服务开启TLS1.2/1.3仍返回403错误求助

问题根因

开启HttpAnalyzer时请求由工具的系统SSL栈代理完成,默认符合服务端的TLS安全校验规则;关闭工具后使用Indy自带的OpenSSL栈发起请求,配置不符合服务端要求被拦截返回403。

修复步骤

  1. 升级基础依赖
  • 升级Indy组件到10.6.0+版本,确认是否支持TLS 1.3协议(对应枚举值sslvTLSv1_3)
  • 替换配套的OpenSSL库到1.1.1+版本,匹配程序运行的32/64位架构
  1. 修改SSL配置
// 仅保留服务端支持的TLS版本,禁用老旧不安全的TLS1.0/1.1
lIOHandlerC.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_3];
// 手动指定符合现代安全要求的加密套件列表,避免默认老旧套件被拦截
lIOHandlerC.SSLOptions.CipherList := 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
// 开启TLS SNI扩展,多域名HTTPS服务强制要求携带SNI才能完成握手
lIOHandlerC.Host := idHttpC.Request.Host;
  1. 修复参数编码问题
    id_token和state为长字符串,存在特殊字符未正确编码的可能,手动对参数值做URL编码:
List.Add('id_token=' + TIdURI.ParamsEncode(JSON_GET_ID(res1, 3, 0)));
List.Add('state=' + TIdURI.ParamsEncode(JSON_GET_ID(res1, 4, 0)));
  1. 调整Cookie配置
    允许二级域名间传递Cookie,避免跨域鉴权时Cookie丢失:
idCookieC.AllowThirdPartyDroppedCookies := True;

内容的提问来源于stack exchange,提问作者Evgeny Levitskiy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:36:03