升级用 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/