You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Delphi 12与Indy 10.6.2搭建SSL TCP通信时遇版本号错误

解决Indy SSL错误:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

你遇到的这个错误并非真的是SSL3版本冲突,而是SSL握手过程中数据格式不匹配导致的误报,以下是针对性的修复方案:

核心问题排查与修复

1. 修正服务器SSL Handler模式

服务器端TIdServerIOHandlerSSLOpenSSL的模式必须明确设置为服务器模式,原配置的sslmUnassigned会导致SSL上下文初始化异常:

// 可在DFM直接修改或代码中设置
sSSLHandler.SSLOptions.Mode := sslmServer;

2. 配置有效端口与IP绑定

  • 服务器端:
    原配置DefaultPort = 0和Bindings = <>无法正常监听端口,需添加IP绑定并设置有效端口(如8443):
    // 代码示例:添加监听绑定
    with IdTCPServer.Bindings.Add do
    begin
      IP := '0.0.0.0'; // 监听所有网络接口
      Port := 8443;
    end;
    
    也可直接在DFM中配置Bindings的IP和Port参数。
  • 客户端:
    将IdTCPClient.Port设置为与服务器一致的端口(如8443),并指定服务器的Host地址。

3. 确保OpenSSL库兼容性

Indy 10.6.2需要匹配版本的OpenSSL动态库:

  • 32位程序:使用libeay32.dll/ssleay32.dll或OpenSSL 1.1.x系列的libcrypto-1_1.dll/libssl-1_1.dll
  • 64位程序:使用对应64位版本的库
  • 确保库文件放置在程序运行目录或系统路径中,且版本支持TLS 1.2

4. 简化SSL PassThrough设置

无需在OnConnect事件中动态设置PassThrough,直接在服务器SSL Handler属性中设置PassThrough = False,连接建立后会自动触发SSL握手,避免代码执行时机问题。

5. 验证证书与密钥有效性

确认file.pem和file.key路径正确:

  • 证书为PEM格式的有效服务器证书
  • 密钥为对应证书的私钥,若有密码需设置SSLOptions.Password

验证修复

修改配置后重启服务器,客户端连接时应能正常完成TLS 1.2握手,不再抛出版本错误。

内容的提问来源于stack exchange,提问作者Robe79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:53:17