【问题标题】:INDY 10.1.5 - Which SSL dlls work with Delphi 2006?INDY 10.1.5 - 哪些 SSL dll 适用于 Delphi 2006?
【发布时间】:2010-12-24 21:14:21
【问题描述】:

我正在尝试连接到谷歌文档(遵循 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 兼容吗?

【问题讨论】:

    标签: delphi ssl openssl indy delphi-2006


    【解决方案1】:

    即使在我升级到 INDY 10.2.3 之后我也遇到了同样的问题,我尝试了我能找到的每个不同版本的“libeay32.dll”和“ssleay32.dll”文件......就像马特一样,我总是得到一个这两个错误:“无法加载 SSL 库”或“与 SSL 连接时出错”,类似于“error: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 上运行

    这让我很痛苦,我希望这篇文章可以节省一些时间。

    【讨论】:

    • 非常有用的 cmets,我相信这些会对处于相同情况的其他人有所帮助。谢谢。
    • +1 虽然在阅读 ehow.com/how_5953595_determine-ssl-protocol-version.html 之前我不知道 sslvSSLv23 是什么意思,但这个修复确实起到了作用。我在 D5 Windows2000 上使用最新的 Indy9
    【解决方案2】:

    您可以使用从Fulgan site 下载的内容进行反复试验。

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

    【讨论】:

    • 我认为你是对的,我需要更新 INDY 并使用最新的 OpenSSL dll。
    • 我认为这会让事情变得更简单。
    • 你知道是什么让我对 Fulgain 安装程序感到疯狂吗?一些安装程序直接安装到 Windows 安装文件夹中(例如 0.9.8h)——以后的安装程序版本给你一个选择。找到有效的 SSL dll 似乎是黑魔法。
    【解决方案3】:

    FWIW,因为我花了很多时间让这个 https 的东西工作,这里是我成功努力的结果。

    1- 德尔福 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;
    

    【讨论】:

    • 谢谢。它对我来说很好。我有来自 indy_OpenSSL096m.zip 的 Indy-10.1.5 和 Delphi-7、Win-7x64 和 SSL dll 以及您的链接 msp.f-secure.com/web-test/common/test.html。但仅当 SSLOptions.Method = sslvSSLv23 或 sslvTLSv1 时。我在下拉列表中没有“sslvTLSv23”或“sslvTLSv3”,而是有“sslvSSLv2”和“sslvSSLv3”。我使用“IdHTTP1.get”作为简化版本或不带参数的请求。
    【解决方案4】:

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

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

    编辑 2:我刚刚复制了更新的 0.9.8k dll,它们也可以正常工作。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 2017-02-15
        • 2015-01-02
        • 2012-02-28
        • 2012-10-28
        • 2011-12-15
        • 1970-01-01
        相关资源
        最近更新 更多