我正在尝试连接到google文档(遵循Marco Cantu的优秀REST示例),但我得到了以下SSL错误:
1)如果我使用openssl-0.9.8i-i386-win32.zip中的SSL dll,我会得到错误:
“无法加载SSL库”
2)如果我使用来自indy_OpenSSL096m.zip的SSL,我会得到错误:
“连接SSL时出错”
3)如果我使用来自openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip的SSL,我会得到错误:
“无法加载SSl库”
现在我对此进行了研究,有很多关于dll的死链接的建议,包括堆栈溢出上的链接。我怀疑我需要找到与我正在使用的INDY版本兼容的SSL dll。
我的问题是,有没有人确切知道哪些SSL dll与Delphi2006和Indy10.1.5兼容?
发布于 2010-03-12 22:07:41
即使在我升级到INDY 10.2.3之后,我也遇到了同样的问题,我尝试了我能找到的每个不同版本的“libeay32.dll”和“ssleay32.dll”文件...像Matt一样,我总是得到两个错误中的一个:“无法加载SSL库”或“错误连接到SSL”,类似于“错误:00000006:lib(0):func(0):EVP lib”...
当我将TidSSLioHandlerSocketOpenSSL.SSLOptions.Method更改为sslvSSLv23时,我非常高兴,一切都开始工作了。
经过更多的研究,我很快就明白了,每当我收到“无法加载SSL库”的错误消息时,我就会使用错误的DLL文件版本,而每当我收到类似“错误:00000006:lib(0):func(0):EVP lib”之类的“连接SSL时出错”的消息时,我就会发现自己使用了错误的SSLOptions.Method值。
其他信息:我正在使用Delphi2006,Indy10.2.3,我在WinXP专业版上运行
这给我带来了很大的痛苦,我希望这篇文章能节省一些人的时间。
发布于 2009-12-09 17:19:12
您可以使用Fulgan site上的下载来进行一些试验和错误。
您可能需要考虑更新您的Indy副本,并使用最新的OpenSSL DLL。
发布于 2012-04-25 01:42:05
顺便说一句,由于我花了很多时间让https这个东西工作,下面是我成功工作的结果。
1- Delphi 7
2- indy9.0.19_d7.exe
3- IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv1;或者,
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv23;或者,
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv3;
我在Delphi7下尝试了indy10.0.76_d7.exe和indy10.1.5_d7.exe,但我无法正确安装它们,更不用说让HTTPS正常工作了。我得到了一条臭名昭著的消息:“单元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;
https://stackoverflow.com/questions/1874677
复制