无法使用Delphi打开Https TSL页面-Indy错误:SSL23_GET_SERVER_HELLO [英] Can't open Https TSL page with Delphi - Indy Error : SSL23_GET_SERVER_HELLO

查看:139
本文介绍了无法使用Delphi打开Https TSL页面-Indy错误:SSL23_GET_SERVER_HELLO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to read an HTML page via HTTPS using Indy's TIdHTTP in Delphi XE5.

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

ssleay32.dll and libeay32.dll are in the main program folder.

我遇到错误: SSL23_GET_SERVER_HELLO 。我该怎么做才能解决此问题?

I am getting an error: SSL23_GET_SERVER_HELLO. What can I do to fix this?

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;


推荐答案

<$ c使用的默认SSL / TLS版本$ c> TIdSSLIOHandlerSocketOpenSSL (如果您未指定版本为TLSv1而不是SSLv23)。因此,出现SSL23错误对您来说是非常不寻常的。

The default SSL/TLS version used by TIdSSLIOHandlerSocketOpenSSL when you don't specify a version is TLSv1, not SSLv23. So it is very unusual for you to be getting an SSL23 error.

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

Many modern web servers now require TLS 1.1 or higher, TLS extensions like SNI, etc. So consider enabling sslvTLSv1_1 and sslvTLSv1_2 in the TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions property, in addition to the default sslvTLSv1. And make sure you are using an up-to-date version of Indy and the OpenSSL DLLs to support those versions.

您还应该将代码包装在<$ c中$ c> try..finally ,所以即使<< c> c 对象,也可以免费 TIdHTTP 对象。 code> Get()引发异常。

You should also wrap your code in a try..finally so you can Free the TIdHTTP object even if Get() raises an exception.

尝试以下操作:

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打开Https TSL页面-Indy错误:SSL23_GET_SERVER_HELLO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆