INDY 10.1.5-哪些SSL DLL与Delphi 2006配合使用?

INDY 10.1.5-哪些SSL DLL与Delphi 2006配合使用?,delphi,ssl,openssl,indy,delphi-2006,Delphi,Ssl,Openssl,Indy,Delphi 2006,我正在尝试连接到google文档(遵循Marco Cantu的优秀REST示例),但我遇到以下SSL错误: 1) 如果使用openssl-0.9.8i-i386-win32.zip中的SSL DLL,则会出现以下错误: “无法加载SSL库” 2) 如果使用indy_OpenSSL096m.zip中的SSL DLL,则会出现以下错误: “连接SSL时出错” 3) 如果使用openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip中的SSL DLL,则会出现

我正在尝试连接到google文档(遵循Marco Cantu的优秀REST示例),但我遇到以下SSL错误:

1) 如果使用openssl-0.9.8i-i386-win32.zip中的SSL DLL,则会出现以下错误:

“无法加载SSL库”

2) 如果使用indy_OpenSSL096m.zip中的SSL DLL,则会出现以下错误:

“连接SSL时出错”

3) 如果使用openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip中的SSL DLL,则会出现以下错误:

“无法加载SSl库”

现在我已经对此进行了研究,有很多关于DLL的死链接的建议,包括堆栈溢出上的链接。我怀疑我需要找到与我正在使用的INDY版本兼容的SSL DLL


我的问题是,有人确切地知道哪些SSL DLL与Delphi 2006和INDY 10.1.5兼容吗?

您可以通过从网站下载来进行一些尝试和错误


您可能需要考虑更新Indy的副本并使用最新的OpenSSL DLL。

据我所知,Indy的最新版本使用标准OpenSSL二进制文件。 . 不久前,我们使用Indy with SSL连接开发了一个Delphi FTP客户端应用程序,我确信我们刚刚发布了当前的OpenSSL DLL

编辑:刚刚检查了应用程序目录,我们使用的DLL是OpenSSL 0.9.8.2(2006年8月3日)。(这是一个旧应用程序)


编辑2:我刚刚复制了最新的0.9.8k dll,它们也工作得很好。

即使在升级到INDY 10.2.3之后,我也遇到了同样的问题,我尝试了我能找到的每一个不同版本的“libeay32.dll”和“ssleay32.dll”文件。。。像Matt一样,我总是遇到两个错误之一:“无法加载SSL库”或“连接SSL时出错”,类似于“Error:00000006:lib(0):func(0):EVP lib”

当我将TidSSLioHandlerSocketOpenSSL.SSLOptions.Method更改为sslvSSLv23时,我非常高兴,一切都开始工作了

再做一点研究,我很快就明白了每当我遇到错误“无法加载SSL库”时,我使用的DLL文件版本都是错误的,每当我遇到“与SSL连接时出错”时,我使用的是错误的SSLOptions.Method值,比如“error:0000000 6:lib(0):func(0):EVP lib”

其他信息:我正在使用Delphi2006,Indy10.2.3,我正在WinXP Pro上运行


这给我带来了很大的痛苦,我希望这篇文章能为大家节省一些时间。

FWIW,因为我花了很多时间让这个https工具工作,下面是我成功努力的结果

1-德尔福7

2-indy9.0.19_d7.exe

3-idsslohandlersocket1.SSLOptions.Method:=sslvTLSv1;或者

idsslohandlersocket1.SSLOptions.Method:=sslvTLSv23;或者

idsslohandlersocket1.SSLOptions.Method:=sslvTLSv3

我在Delphi 7下尝试了indy10.0.76_d7.exe和indy10.1.5_d7.exe,但我无法让它们正确安装,更不用说让HTTPS正常工作了。我收到了一条臭名昭著的消息“Unit IdSysWin32是用不同版本的IdeException.EIdException编译的。”我在web上搜索了该问题的解决方案,但找不到一个解决方案——其他许多人都有相同的消息

测试https的有用站点是

以下是我的资料来源:

procedure TForm1.ButtonHTTPSClick(Sender: TObject);
var
  IdHTTP1: TIdHTTP;
  ParamStringList: TStringList;
  s1: String;
  MemoryStream1: TMemoryStream;
  IdSSLIOHandlerSocket1:  TIdSSLIOHandlerSocket;
begin //  ssl works fine must have Indy version indy9.0.19_d7.exe and must use option  sslvSSLv23

  Screen.Cursor := crHourGlass;
  IdHTTP1 := TIdHTTP.Create(nil);
  IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocket.Create(nil); 
  IdHTTP1.IOHandler := IdSSLIOHandlerSocket1;

//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv1; // sslvSSLv1 works fine
    IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv3; // sslvSSLv3 works fine
//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23; // sslvSSLv23 works fine
//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv2;   sslvSSLv2 does not work
    IdSSLIOHandlerSocket1.SSLOptions.Mode := sslmUnassigned;
    IdSSLIOHandlerSocket1.SSLOptions.VerifyMode := [];
  IdSSLIOHandlerSocket1.SSLOptions.VerifyDepth := 0;

  ParamStringList := TStringList.Create;
  MemoryStream1 := TMemoryStream.Create;
  s1 := IdHTTP1.Post('https://msp.f-secure.com/web-test/common/test.html', ParamStringList);
  MemoryStream1.Write(s1[1], Length(s1));
  MemoryStream1.Position := 0;
  MemoryStream1.SaveToFile('c:\temp\MemoryStream1.txt');
  Memo1.Lines.Clear;
  Memo1.Lines.LoadFromFile('c:\temp\MemoryStream1.txt');
  MemoryStream1.Free;
  ParamStringList.Free;
  IdSSLIOHandlerSocket1.Free;
  IdHTTP1.Free;
  Screen.Cursor := crDefault;
end;

找到您正在使用的Indy版本。复制Indy dll,即libeay32.dll、libssl32.dll和
将ssleay32.dll放入Windows/System 32文件夹。它将解决“无法加载SSL库”的错误。

我认为你是对的,我需要更新INDY并使用最新的OpenSSL dll。我认为这将使事情变得更简单。你知道是什么让我对Fulgain安装程序着迷吗?一些安装程序直接安装到windows安装文件夹中(例如0.9.8h)——更高版本的安装程序为您提供了选择。这看起来像是找到工作的SSL DLL的黑魔法。非常有用的评论,我相信这些会在同样的情况下帮助其他人。谢谢。+1此修复成功了,尽管我在阅读之前不知道SSLV23的意思,但我正在D5 Windows2000上使用最新的Indy9谢谢。这对我来说很好。我有Indy_OpenSSL096m.zip中的Indy-10.1.5和Delphi-7、Win-7x64和SSL DLL以及您的链接。但仅当SSLOptions.Method=sslv23或sslvTLSv1时。下拉列表中没有“sslvTLSv23”或“sslvTLSv3”,而是“SSLV2”和“SSLV3”。我使用“IdHTTP1.get”作为没有参数的简化版本或请求。