【问题标题】:Error connecting with SSL when posting using Indy使用 Indy 发布时使用 SSL 连接时出错
【发布时间】:2018-06-28 19:30:24
【问题描述】:

我正在尝试使用 Delphi 5 通过 TIdHTTP (Indy) 在 Web 服务上发布,每当我调用 post 方法时,它都会返回“错误连接 SSL 错误”异常。

这是我要运行的代码

FHandle                        := TIdSSLIOHandlerSocket.Create(nil);
FHandle.SSLOptions.Method      := sslvTLSv1;
IdHttp.IOHandler               := FHandle;
IdHttp.HandleRedirects         := True;

IdHTTP.Request.CustomHeaders.Add('Content-Type: application/json');
IdHttp.Request.ContentType := 'application/json';

Load();

vAux := TMemoryStream.Create();
try
  WriteStringToStream(vAux, edJson.Text);
  vAux.Position := 0;
  vRet := IdHTTP.Post(edHost.Text, vAux);
finally
  vAux.Free();
end;

似乎无论我在 CustomHeaders 或任何其他属性中进行什么更改,都会发生相同的错误。

我尝试将 de SSLOption.Method 更改为所有可用的,但我无法让它工作。

有什么建议让我试试?

【问题讨论】:

  • 提高冗长性?相同的代码是否适用于另一台服务器?其他客户端是否与您的应用程序查询的服务器在同一台服务器上工作?
  • 我没有放任何这些,因为我无法准确回答。我在其他服务器上尝试了相同的代码并且它可以工作,但我认为这不是一个可靠的信息,因为它是一个完全不同的场景。是的,其他客户可以在同一台服务器上发帖,因为我正试图在一家国家公司的 API 上发帖
  • 因此您需要获取有关异常的更多详细信息...因为存在大量可能的 TLS 错误,从证书/CA 不匹配开始...如果您提供了您尝试访问的远程 URL也许其他人可以尝试为您提供见解。
  • 现在很多网站都放弃了对 TLS 1.0 的支持,现在需要 TLS 1.1+。您正在使用不支持 TLS 1.1+ 的 Indy 9。您可能需要升级到 Indy 10 才能做您想做的事。附带说明,不要使用CustomHeaders 属性发送Content-Type 标头,只能使用Request.ContentType 属性。您正在向服务器发送 2 个 Content-Type 标头,这可能会使其混淆。
  • 感谢您的旁注,请记住这一点。我刚刚尝试在 Delphi XE7 上的测试应用程序上运行相同的代码,并且所有可用版本都存在错误。

标签: delphi indy delphi-5 idhttp


【解决方案1】:

我想出了问题所在。这是一个证书文件,在来自TIdSSLIOHandlerSocket 组件的CertFile 属性上存在错误,我什至没有意识到它在那里。指出正确的证书文件后,一切顺利。谢谢你们的见解!

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多