Can't open Https TSL page with Delphi - Indy Error : SSL23_GET_SERVER_HELLO

Can't open Https TSL page with Delphi - Indy Error : SSL23_GET_SERVER_HELLO

我想在 Delphi XE5 中使用 Indy 的 TIdHTTP 通过 HTTPS 读取 HTML 页面。

ssleay32.dlllibeay32.dll 在主程序文件夹中。

我收到一个错误:SSL23_GET_SERVER_HELLO。我该怎么做才能解决这个问题?

function get_page_text:string;
var
  Response: String;
  HTTPClient: TidHTTP;
const
  url = 'https://www.lustundreiz.com/login';
begin
  HTTPClient := TidHTTP.Create;
  HTTPClient.AllowCookies := True;
  HTTPClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Response := HTTPClient.get(url);
  HTTPClient.Free;
  result := response;
end;

当您未指定版本时,TIdSSLIOHandlerSocketOpenSSL 使用的默认 SSL/TLS 版本是 TLSv1,而不是 SSLv23。因此,您收到 SSL23 错误是非常不寻常的。

许多现代网络服务器现在需要 TLS 1.1 或更高版本,TLS 扩展如 SNI 等。因此请考虑在 TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions 属性 中启用 sslvTLSv1_1sslvTLSv1_2,除了默认的 sslvTLSv1。并确保您使用的是最新版本的 Indy 和 OpenSSL DLL 以支持这些版本。

您还应该将代码包装在 try..finally 中,这样即使 Get() 引发异常,您也可以 Free TIdHTTP 对象。

试试这个:

function get_page_text:string;
var
  HTTPClient: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
const
  url = 'https://www.lustundreiz.com/login';
begin
  HTTPClient := TIdHTTP.Create;
  try
    HTTPClient.AllowCookies := True;
    // set other HTTP properties as needed...

    SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTPClient);
    SSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    // set other SSL properties as needed...
    HTTPClient.IOHandler := SSL;

    Result := HTTPClient.Get(url);
  finally
    HTTPClient.Free;
  end;
end;

好的,在我从 Delphi XE5 更新到 Delphi XE10 之后,代码运行良好,没有任何错误。 感谢雷米的支持