INDY 10.1.5 - 哪些SSL dll与Delphi 2006一起使用?

时间:2009-12-09 15:31:30

标签: delphi ssl openssl indy delphi-2006

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

1)如果我使用openssl-0.9.8i-i386-win32.zip中的SSL dlls,我收到错误:

“无法加载SSL库”

2)如果我使用indy_OpenSSL096m.zip中的SSL dll,我收到错误:

“使用SSL连接时出错”

3)如果我使用openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip中的SSL dlls,我收到错误:

“无法加载SSl库”

现在我已经研究了这个,并且有很多关于dll死链接的建议,包括堆栈溢出的链接。我怀疑我需要找到与我正在使用的INDY版本兼容的SSL dll。

我的问题是,有没有人确切知道哪些SSL dll与Delphi 2006兼容? INDY 10.1.5?

5 个答案:

答案 0 :(得分:18)

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

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

更多的研究,我很快就明白了,当我收到错误“无法加载SSL库”时,我使用了错误版本的DLL文件,随时我得到“错误连接SSL”,例如“错误: 00000006:lib(0):func(0):EVP lib“我使用了错误的SSLOptions.Method值。

其他信息:我正在使用Delphi 2006,INDY 10.2.3并且我在WinXP Pro上运行

这给我带来了太多的痛苦,我希望这篇文章可以节省一些时间。

答案 1 :(得分:3)

您可以使用Fulgan site的下载来尝试一些试错。

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

答案 2 :(得分:3)

FWIW,因为我花了很多时间来使用这个https的东西,这是我成功努力的结果。

1- Delphi 7

2- indy9.0.19_d7.exe

3- IdSSLIOHandlerSocket1.SSLOptions.Method:= sslvTLSv1;或者,

IdSSLIOHandlerSocket1.SSLOptions.Method:= sslvTLSv23;或者,

IdSSLIOHandlerSocket1.SSLOptions.Method:= sslvTLSv3;

我在Delphi 7下尝试了indy10.0.76_d7.exe和indy10.1.5_d7.exe,我无法正确安装它们,更不用说让HTTPS工作了。我得到了臭名昭着的消息" Unit IdSysWin32是用不同版本的IdException.EIdException编译的。"我在网上搜索了这个问题的解决方案,但是找不到其中一个 - 其他人有相同的信息。

用于测试https的有用网站是https://msp.f-secure.com/web-test/common/test.html

这是我的来源:

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;

答案 3 :(得分:2)

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

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

编辑2:我刚刚复制了最近的0.9.8k dll,它们也能正常工作。

答案 4 :(得分:1)

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