【问题标题】:Could not load SSL library [closed]无法加载 SSL 库 [关闭]
【发布时间】:2019-11-28 07:18:50
【问题描述】:

我正在尝试使用 REST。所以我正在使用TIdHTTP 组件。但它说“无法加载 SSL 库”。 我错过了什么?我对 SSL 的了解为零。

我使用的是 Delphi 2007、Indy 10.1.5 和 Windows 32 位。

我将libeay32.dllssleay32.dll 放在我的EXE 目录中(我在https://indy.fulgan.com/SSL/ 找到这些DLL 文件,文件openssl-1.0.2t-i386-win32.rar)。

type
  TForm1 = class(TForm)
  IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
  ...

procedure TForm1.btn_ReqCheckServerClick(Sender: TObject);
var
  s: string;
  lHTTP: TIdHTTP;
const
  URL_CHECK_SERVER = 'http://example';  // some URL site to ping
begin
  lHTTP := TIdHTTP.Create(nil);
  try
    lHTTP.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvTLSv1;
    lHTTP.ProtocolVersion:=pv1_1;
    lHTTP.Request.ContentType := 'application/json';
    lHTTP.HandleRedirects := True;
    s := lHTTP.Get(URL_CHECK_SERVER);
    ShowMessage(s);
  finally
    lHTTP.Free;
  end;
end;

【问题讨论】:

  • 问题是什么?您想知道如何获取最新代码吗?或者你想知道如何让你的程序运行?
  • 最新版本在这里:github.com/IndySockets/Indy
  • @DavidHeffernan 最新的印地,不是最新的代码。我想获取最新的 indy 并运行我的程序。
  • @zed 在哪个文件夹中?他们中的大多数人注意到“远程移动”。什么是手段?
  • @FZS 你以前克隆过 git repo 吗?

标签: delphi openssl indy delphi-2007 idhttp


【解决方案1】:

有人知道在哪里可以下载最新版本的 Indy 吗?在https://www.indyproject.org,很多链接都失效了。

Indy 的 SVN 存储库即将停用。 Indy 的 GitHub 存储库https://github.com/IndySockets/Indy 现在是前进的活跃存储库。 Fulgan 最近关闭了 Indy 的 SVN 和 GitHub 存储库之间的同步。

Fulgan 在https://indy.fulgan.com/ZIP/ 上的夜间 zip 文件不再是 Indy 的最新开发快照(自从 Fulgan 上次从 SVN 提取快照以来,GitHub 已经有几次签入)。由于用户可以从 GitHub 拉取 Indy 源代码的 zip 文件,因此它变得多余了。

Indy 还将很快为其 OpenSSL 库二进制文件创建一个新的 GitHub 存储库,这将成为 Indy 的 Fulgan 镜像棺材的最后一颗钉子。

Indy 的网站https://www.indyproject.org 尚未更新以反映这一新信息。尽管开发快照的下载部分中有一个指向 GitHub 存储库的链接。

您可以转到 GitHub 存储库并获取 /Lib 文件夹。您至少需要/Lib/Core/Lib/Protocols/Lib/System 文件夹来编译Indy。

我正在尝试使用 REST。所以我使用TIdHTTP 组件。但它不起作用。它说“无法加载 SSL 库”。我已经从这个论坛读到过这个错误,但它仍然不起作用。

您可以在IdSSLOpenSSLHeaders 单元中使用Indy 的WhichFailedToLoad() 函数来找出Indy 无法加载OpenSSL 的原因。 DLL 无法加载到内存中,或者 DLL 缺少 Indy 所需的导出。

但请注意,10.1.5 是 Indy 的一个非常旧的版本,最新版本是 10.6.2。自 10.1.5 发布以来,10.1.5 很可能无法处理多年来对 OpenSSL 所做的更改。例如,取消对 SSLv2 和 SSLv3 的支持可能是旧版 Indy 无法加载更新的 OpenSSL DLL 的罪魁祸首。

【讨论】:

  • 好的,升级到 Indy 10.6.2.5516。谢谢你,雷米。使用 libeay32.dll 和 ssleay32.dll,修改日期为 2015 年 11 月 13 日上午 7:55。
【解决方案2】:

我正在使用:

  • Delphi 2007(软件包版本 110)。
  • Windows 7。

将旧的 Indy 版本 (Indy 10.1.5) 升级到相对新的 Indy 版本 (Indy 10.6.2.5516)。

我尝试过的步骤:

  • 组件 |安装包... |设计包
  • 指向 Indy 10 Core Design Time,然后单击删除按钮
  • 指向 Indy 10 Protocols Design Time,然后单击删除按钮
  • 删除所有引用旧 Indy 版本的库路径
    (工具 | 选项 | 环境选项 | Delphi 选项 | 库 - Win32)
  • 删除 PC 上的所有 IndySystem110.* IndyCore110.* 和 IndyProtocols110.*。
  • 在 IDE 中打开各个 DPK 文件,然后按以下顺序编译它们:
    • IndySystem110.dpk(在 Lib\System 中)仅编译。
    • IndyCore110.dpk(在 Lib\Core 中)仅编译。
    • IndyProtocols110.dpk(在 Lib\Protocols 中)仅编译。
    • dclIndyCore110.dpk(在 Lib\Core 中),编译然后安装。
    • dclIndyProtocols110.dpk(在 Lib\Protocols 中),编译然后安装。
  • 将 Lib\System、Lib\Core 和 Lib\Protocols 添加到 Delphi 库路径。 (工具 | 选项 | 环境选项 | Delphi 选项 | 库 - Win32)

然后我将修改日期 11/13/2015 7:55 AMlibeay32.dllssleay32.dll 都放在我的可执行文件中文件夹位置。它有效!

【讨论】:

  • "Indy 10.6.2.5516" - 为什么不是最新的? Fulgan 上的最后一个版本是 10.6.2.5520,GitHub 上的版本比这更新。 “libeay32.dll 和 ssleay32.dll 的修改日期均为 2015 年 11 月 13 日上午 7:55 ” - 为什么使用这么旧的 DLL?请改用最新的 DLL。 OpenSSL 1.0.2t(2019 年 9 月)应该适用于 Indy。 OpenSSL 1.0.2u 将在 2 天内发布。
  • 我已经尝试使用 5520 版本,但是在安装 dclIndyCore110.dpk 时,它引发了错误。它说“无法安装包 C:\blablabla\RAD Studio\5.0\Bpl\dclIndyCore110.bpl”
  • 你尝试过来自 GitHub 的新版本吗?
猜你喜欢
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2014-03-29
相关资源
最近更新 更多