Indy10适配OpenSSL 3.X及TLS1.3的技术咨询(RAD Studio XE5)
Indy10 + TLS1.3 支持方案(基于RAD Studio XE5)
核心结论
要在现有应用中添加TLS1.3支持,必须同时升级Indy10到兼容OpenSSL 3.x的版本,并替换OpenSSL为3.x系列库。
具体实现方案
1. 升级OpenSSL至3.x系列
- OpenSSL 1.0.2u原生不支持TLS1.3,必须切换到支持该协议的版本。推荐选用OpenSSL 3.0.x LTS分支(长期支持),避免使用已停止维护的1.1.1分支。
- 下载与你的应用架构(32位/64位)匹配的OpenSSL 3.x二进制动态库(
libssl-3.dll、libcrypto-3.dll,部分版本会带平台后缀如libssl-3-x64.dll),替换原有1.0.2u的库文件。
2. 升级Indy10到兼容OpenSSL 3.x的版本
- RAD Studio XE5自带的Indy10版本不支持OpenSSL 3.x的API和TLS1.3,需要获取Indy10的最新维护版源码:
- 编译源码时,针对XE5的Delphi版本调整代码(部分新语法可能需要修改以适配XE5的编译器)。
- 编译完成后,替换项目中原有的Indy组件引用,确保使用新编译的Indy10库。
3. 配置Indy组件启用TLS1.3
在代码中明确指定TLS版本集合,以TIdSSLIOHandlerSocketOpenSSL为例:
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_3];
- 可通过
IdSSLOpenSSL.LoadOpenSSLLibrary函数验证OpenSSL库是否加载成功,返回True则表示加载正常。
常见问题解答
是否需要同时升级Indy10与OpenSSL至3.X版本?
是的,二者缺一不可:
- OpenSSL 1.0.2u原生不支持TLS1.3,必须升级到3.x才能启用该协议。
- 旧版Indy10无法适配OpenSSL 3.x的API变更(如弃用旧加密函数、引入Provider架构),必须升级Indy10才能正常调用OpenSSL 3.x的TLS1.3功能。
Indy10是否已支持OpenSSL 3.X及TLS1.3?
Indy10的最新维护版本已完全支持OpenSSL 3.x和TLS1.3,但注意:
- XE5自带的Indy10是旧版本,不具备该能力,必须手动升级。
- 部分新的Indy10代码可能用到XE5不支持的Delphi特性,需要少量调整才能在XE5环境下编译通过。
内容的提问来源于stack exchange,提问作者Nilesh Shinde
相关产品推荐
相关产品推荐

