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

如何使用TIdHTTP发起不安全的SSL请求?

解决TIdHTTP访问基于IP的HTTPS URL时证书验证失败的问题

当你用IP地址访问HTTPS URL时,证书验证失败的核心原因是HTTPS证书默认绑定域名,证书的主题名称(Subject)或SAN扩展中并未包含你使用的IP地址,因此Indy的SSL验证逻辑会判定证书无效——这和curl遇到的场景完全一致。

要实现类似curl -insecure的跳过证书验证功能,你需要给TIdHTTP配置专用的SSL处理器并关闭证书验证逻辑,具体修改如下:

首先确保你的项目已引用Indy的OpenSSL相关单元:IdSSLOpenSSL、IdSSLIOHandlerSocketOpenSSL

然后调整你的代码:

var
  SSESocket: TIdHTTP;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  SSESocket := TIdHTTP.Create;
  try
    // 创建并配置SSL处理器
    SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SSESocket);
    // 关闭证书验证,对应curl的-insecure参数
    SSLHandler.SSLOptions.VerifyMode := [];
    SSLHandler.SSLOptions.VerifyDepth := 0;
    // 将SSL处理器绑定到TIdHTTP
    SSESocket.IOHandler := SSLHandler;

    SSESocket.Request.Accept := 'text/event-stream';
    SSESocket.Request.CacheControl := 'no-store';
    SSESocket.Get('https://'+Host+'/eventstream/clip/v2', SSEventStream);
  finally
    SSESocket.Free;
  end;
end;

关键配置说明:

  • SSLHandler.SSLOptions.VerifyMode := []:清空验证模式集合,关闭所有证书有效性检查
  • SSLHandler.SSLOptions.VerifyDepth := 0:设置证书链验证深度为0,彻底跳过证书链的层级验证

修改后,TIdHTTP就会忽略证书与IP不匹配的问题,成功建立SSL连接。

内容的提问来源于stack exchange,提问作者Wolfgang Bures

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:44:55