delphi - 升级 Indy 库以使用最新的 OpenSSL 库

标签 delphi openssl indy indy10

升级用 Delphi 编写的 Indy 库以使用具有最新功能(例如 TLS v1.3)的最新 OpenSSL 库的过程是什么?

我发现的 Indy 库的最后一个版本使用 libssl32.dll 和 ssleay32.dll DLL。最新的 OpenSSL 库生成 libssl-1_1.dll 和 libcrypto-1_1.dll DLL。通过更改 Indy libray 中的 DLL 名称,OpenSSL DLL 的动态加载会失败,因为 Indy 中定义的许多函数与 OpenSSL DLL 的函数不匹配。因此 OpenSSL API 已更改。

据我了解,Indy 库的 Delphi 源文件 IdSSL*.pas 应该升级:

  • IdSSL.pas
  • IdSSLDotNET.pas
  • IdSSLOpenSSL.pas
  • IdSSLOpenSSLHeaders.pas
  • IdSSLOpenSSLHeaders_static.pas
  • IdSSLOpenSSLUtils.pas

最佳答案

正如您所观察到的,OpenSSL 1.1 有另一个 API。目前,Indy 仅使用 1.0 调用,并且不使用异步处理等 1.1 特定功能。让 Indy 切换到 Open SLL 1.1 将是一次重大重构(请参阅下面的 Remy 评论)。

但是 Indy 使用的 OpenSSL DLL 并未被弃用。 Fulgan Reference WebSite目前有例如openssl-1.0.2o-i386-win32.zip 这是分支上可用的最新稳定版本as stated by the official OpenSSL source code 。您混淆了分支(1.0 vs 1.1 = API 更改)和修订版(1.0.2a vs 1.0.2o = 新修复)。

所以不用担心。如果您将 Indy 与 a proper Cypher Names list 一起使用和最新的 Fulgan DLL,您已经是最新且安全的了。有时比某些旧的 Linux 发行版更安全,后者可能落后于系统附带的修订版本。即使 TLS 1.3 仍远未成为强制要求,因为客户端尚未启用它。我确信当 1.1 的某些功能成为强制性的(或切换到 Windows SChannel API)时,Indy 团队将支持 1.1。

关于delphi - 升级 Indy 库以使用最新的 OpenSSL 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50481630/

相关文章:

macos - 错误: 'zlib' is an invalid command

html - Firefox 破坏标题并添加随机字符

delphi - 对 smtp.live.com 和 TIdSmtp(Indy、Delphi)的 SSL 支持

Delphi - 从 TPanel 删除运行时生成的按钮

delphi - 处理包含 "Ctrl"的热键后 SendInput 失败

ssl - ssl 在 web 开发中是如何工作的?

delphi - 为什么使用 JCL UNITVERSIONING?

ios - 仅使用 Diffie-Hellman 为 iOS 构建 OpenSSL

html - 在不下载整个网页的情况下提取 HTML 数据