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

Fla*_*viu 2 delphi openssl indy indy10

升级用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发生了变化.

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

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

Arn*_*hez 7

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

但是Indy使用的OpenSSL DLL并没有被弃用.该Fulgan参考资料网站拥有目前国内如openssl-1.0.2o-i386-win32.zip这是最新的稳定版本的分支提供,由官方OpenSSL的源代码表示.你是混乱的分支(1.0 vs 1.1 = API变化)和修订(1.0.2a vs 1.0.2o =新修复).

所以不要担心.如果您将Indy与适当的Cypher名称列表和最新的Fulgan DLL一起使用,那么您就是最新且安全的.有时比一些旧的Linux发行版更安全,后者可能会滞后于系统附带的修订版.即使是TLS 1.3仍然远非强制性,因为它尚未在客户端启用.我相信当Indy团队的某些功能成为必需功能(或切换到Windows SChannel API)时,它将支持1.1.

  • @Flaviu Indy 目前仅支持 OpenSSL 1.0.2 及更早版本,[尚不支持 OpenSSL 1.1.0](https://github.com/IndySockets/Indy/issues/183)。TLS 1.3 不会在 OpenSSL 1.0.2 中实现,[它将需要 OpenSSL 1.1.1](https://www.openssl.org/blog/blog/2017/05/04/tlsv1.3/)。但是 OpenSSL 1.1.0 对 OpenSSL 1.0.2 有*主要* API 更改,甚至 TLS 1.3 也是对 TLS 1.2 的*主要* 重写。因此,这不是添加新 DLL 或对 Indy 进行简单调整的简单问题。它本质上是一个新框架,因此需要迁移现有代码。这是很多工作。 (2认同)
  • Indy 将支持 OpenSSL 1.1.x *最终*,但不会在不久的将来支持。TLS 1.3 尚未标准化。当 TLS 1.3 准备好广泛使用时(OpenSSL 仍在试验它),到那时 Indy *可能* 已更新以支持 OpenSSL 1.1.0。或者它*可能*实施了不同的解决方案(在 Windows 上使用 SChannel)。现在说还为时过早。 (2认同)