带有Delphi-7 can和x27的Indy10;t下载一些SSL页面,即使是2019年5月的DLL
我正在开发一个旧的Delphi 7应用程序,它使用Indy 10下载网站。我在处理一些(而不是全部)SSL页面时遇到困难 版本数据: 印地10号 “libeay32.dll”:1.0.2.19@19年5月31日 “ssleay32.dll”:1.0.2.19@19年5月31日 尝试使用SSL(例如“”)下载某些页面时,请在带有Delphi-7 can和x27的Indy10;t下载一些SSL页面,即使是2019年5月的DLL,delphi,openssl,delphi-7,indy,indy10,Delphi,Openssl,Delphi 7,Indy,Indy10,我正在开发一个旧的Delphi 7应用程序,它使用Indy 10下载网站。我在处理一些(而不是全部)SSL页面时遇到困难 版本数据: 印地10号 “libeay32.dll”:1.0.2.19@19年5月31日 “ssleay32.dll”:1.0.2.19@19年5月31日 尝试使用SSL(例如“”)下载某些页面时,请在IdSSLOpenSSLHeaders单元中,即Rev。1.8,以下程序产生指示错误: 类过程EIdOpenSSLAPISSLError.RaiseExceptionCode(
IdSSLOpenSSLHeaders
单元中,即Rev。1.8,以下程序产生指示错误:
类过程EIdOpenSSLAPISSLError.RaiseExceptionCode(常量AErrCode,ARetCode:TIdC\u INT;常量AMsg:String)代码>
初始化代码:
HTTP := TIdHTTP.Create;
with HTTP do begin
Request.UserAgent := 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
HandleRedirects := True;
RedirectMaximum := 5;
ReadTimeout := 20400;
//Request.AcceptEncoding := 'text/html, deflate, gzip'; // some websites don't download with this set
Compressor := TIdCompressorZLib.Create;
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
HTTPOptions := HTTPOptions + [hoForceEncodeParams, hoInProcessAuth];
end;
有人知道如何解决这个问题吗?EOF错误仅仅意味着服务器在TLS握手过程中正在关闭其套接字连接的末端,而没有首先发送回TLS警报。这意味着服务器不喜欢握手中的某些内容,正在退出。最可能的罪魁祸首是TLS版本
默认情况下,TIdSSLIOHandlerSocketOpenSSL
仅启用TLS 1.0,但现在许多站点需要TLS 1.1或1.2。您可以使用TIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions
属性启用TLS 1.1和1.2
HTTP:=TIdHTTP.Create;
HTTP.Request.UserAgent:=“Mozilla/5.0(兼容;Googlebot/2.1+http://www.google.com/bot.html)';
HTTP.HandleRedirects:=True;
HTTP.RedirectMaximum:=5;
HTTP.ReadTimeout:=20400;
//HTTP.Request.AcceptEncoding:=“text/html,deflate,gzip”;//有些网站不下载此设置
HTTP.Compressor:=TIdCompressorZLib.Create(HTTP);
HTTP.HTTPOptions:=HTTP.HTTPOptions+[hoForceEncodeParams,hoInProcessAuth];
SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
SSL SSLOptions.SSLVersions:=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];//不经意间(即猜测)——站点支持/需要哪个版本的SSL?Indy的OpenSSL实现中默认启用了那个/那个些版本/版本吗?我也不知道。由于Indy的DLL是今年5月发布的,我想它是最新的。谢谢。如果我启用此选项,它是否仍适用于TLS 1.0?@IamIC yes,因为sslvTLSv1
(TLS 1.0)包含在启用的版本集中是否应启用其他选项?我注意到还有一些:sslvSSLv2、sslvSSLv23、sslvSSLv3、sslvTLSv1、sslvTLSv1\u 1、sslvTLSv1\u 2
@IamIC没有人再使用SSL 2.0(sslvSSLv2)或3.0(SSLVSSLVSSLV3),它们很旧,不再安全。除非旧系统需要,否则不要使用它们。即使TLS1.0(sslvTLSv1)现在也开始逐步淘汰,但仍在使用中。当启用多个版本时,SSLV23在内部用作通配符,您不需要直接使用它。@IamIC响应代码不应为-1,这意味着服务器响应格式不正确。至于UserAgent,一些服务器不喜欢/不接受Indy的默认UserAgent,可能是因为多年来使用Indy创建了许多恶意软件/机器人程序,或者只是没有正确编码以处理非浏览器UserAgent。因此,是的,有时您可能会遇到一个服务器,它需要像UserAgent这样的真正的浏览器才能正常工作