即使设置了 SslOptions,我仍然会遇到“套接字错误 # 10054 连接由对等重置”在 Indy 中使用 TIdHTTP 从 https url 获取

问题描述

我使用 TIdHTTP 从 https URL 获取,我的代码在使用 http 之前工作正常,但在 https 上我有

套接错误 #10054 连接由对等方重置。

在许多 SO 答案中,我读到 TLS 1.0 是认设置,因此我尝试将其设置为 TLS 1.2

我尝试更改 TIdHTTPTIdSSLIOHandlerSocketopenSSL 中的许多属性,但没有成功。

失败的 URL 是 https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler

一个我无法克服的握手问题,如果我禁用防火墙和代理并直接连接到 http URL,它就可以工作(即使在这种情况下我必须使用完整的 URL 才能获得有意义的行为)。所以我的问题纯粹是在 Indy:如何成功连接到那个 URL?

这是我使用的代码

procedure TForm1.btnGetFromMyWebserver(Sender: TObject);
var
  IdHTTP: TIdHTTP;
  IdSSLIOHandlerSocketopenSSL: TIdSSLIOHandlerSocketopenSSL;
  response,url: string;
begin
  IdHTTP := TIdHTTP.Create;
  // here i set the custom headers that are not relevant
  // to study the connection closed by peer problem
  try

      try
        IdSSLIOHandlerSocketopenSSL :=  TIdSSLIOHandlerSocketopenSSL.Create(IdHTTP);
        IdSSLIOHandlerSocketopenSSL.Port := 443; // I tried to force the port to 443
        IdSSLIOHandlerSocketopenSSL.SSLOptions.Mode       := sslmClient;
        IdSSLIOHandlerSocketopenSSL.SSLOptions.SSLVersions:= [sslvTLSv1_2];
        IdHTTP.IOHandler := IdSSLIOHandlerSocketopenSSL;
        IdHTTP.HandleRedirects := True;
        url := 'https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler'; // this is not the actual endpoint but it is enough to reproduce the handshaking error
        response := IdHTTP.Get(url);
      except
        on e:Exception
        do
          response := e.message;
      end;
  finally
    IdHTTP.Free;
  end;
  ShowMessage('Response was:' + response);
end;

你能帮我看看问题出在哪里吗?

我的 indy 版本是 10.6.2.5298,我使用的是 Delphi 10 Seattle。

提前致谢。

解决方法

我意识到我使用的是非常旧的 Open SSL dll,通过从 GitHub 获取最新版本,根据 Remy Lebeau 的建议,我设法使 gethttp 调用即使使用 https 端点也能正常工作。

所以解决方案是使用最新版本的 Open SSl dll。