【问题标题】:Upgrade Indy library to use latest OpenSSL library升级 Indy 库以使用最新的 OpenSSL 库
【发布时间】:2018-11-02 01:05:21
【问题描述】:

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

我发现的最后一个版本的 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

【问题讨论】:

    标签: delphi openssl indy indy10


    【解决方案1】:

    如您所见,OpenSSL 1.1 有另一个 API。目前,Indy 只使用 1.0 调用,不使用异步处理等 1.1 特定功能。让 Indy 切换到 Open SLL 1.1 将是一次重大的重构(参见下面的 Remy cmets)。

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

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

    【讨论】:

    • OpenSSL 1.0.2 多年来一直支持 TLS 1.2 - 我不明白你的意思。请检查 1.0 和 1.1 分支的功能集。你混淆了分支和修订。 1.0.2o 比 1.1.0a 更新、安全得多。
    • @Flaviu Indy 目前仅支持 OpenSSL 1.0.2 及更早版本,it does not support OpenSSL 1.1.0 yet。 TLS 1.3 不会在 OpenSSL 1.0.2 中实现,it will require OpenSSL 1.1.1。但是 OpenSSL 1.1.0 对 OpenSSL 1.0.2 的 API 进行了主要的更改,甚至 TLS 1.3 也是对 TLS 1.2 的主要重写。因此,加入新的 DLL 或对 Indy 进行简单的调整并不是一件简单的事情。它本质上是一个新框架,因此需要迁移现有代码。这是很多工作。
    • Indy最终将支持 OpenSSL 1.1.x,但不会在不久的将来。而且 TLS 1.3 还没有标准化。到 TLS 1.3 准备好供广泛公众使用(OpenSSL 仍在试验它)时,Indy 可能 已经更新以支持 OpenSSL 1.1.0。或者它可能实现了不同的解决方案(在 Windows 上使用 SChannel)。现在说还为时过早。
    • 谢谢!我以为您正在使用脚本将 OpenSSL C 符号从头文件、def 文件和/或映射文件转换为 Delphi,并且当 OpenSSL 发生更改时,有一个更新 Indy 的常用程序。但我现在明白,由于 API 的变化,对 Indy 中 TLS v1.3 的支持将是一个重大变化。当您开始此类升级时,我可以在 Github 上为这一更改做出贡献。
    • @Toby 见Radek's answer。支持 OpenSSL 1.1.x 的工作仍在进行中。
    【解决方案2】:

    由于具有最新功能 1.1.x 的 OpenSSL 库与受支持的 OpenSSL 库 1.0.x 之间的 API 不兼容,Indy 代码必须重新编写。这种升级没有简单/通用的过程。

    【讨论】:

      【解决方案3】:

      OpenSSL 1.1 几乎可以与最新版本的 Indy(主分支)一起使用。查看 Indy github 页面的链接: https://github.com/IndySockets/Indy/pull/299

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-18
        • 2017-09-05
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多