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

Indy TIdFTP连接TLS1.2服务器报错534:Protection level C not allowed

解决TIdFTP调用List时出现534 Protection level C not allowed的问题

错误534 Protection level C not allowed的核心原因是FTP客户端与服务器的加密保护级别不匹配:FileZilla服务器要求更高的加密保护,而TIdFTP默认的保护级别为明文(C级),不符合服务器要求。以下是具体解决步骤:

1. 调整TIdFTP的保护级别设置

  • 在设计期或代码中,将TIdFTP的Protection属性设置为ftpsPrivate(对应保护级别P,所有数据传输均加密),这是FileZilla服务器常用的强制保护级别。
  • 避免使用ftpsClear(C级,明文传输)或ftpsSafe(S级,仅命令加密),这两个级别会被服务器拒绝。

2. 正确配置SSLIOHandler的TLS版本与模式

  • 明确指定SSL版本为TLS 1.2及以上,确保与服务器最低要求匹配:
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_3];
    
  • 确认SSLOptions.Mode设置为sslmClient,保证SSLIOHandler以客户端模式工作。
  • 关键检查:确保项目使用的OpenSSL库文件(32位为libeay32.dll、ssleay32.dll;64位为libcrypto-1_1-x64.dll、libssl-1_1-x64.dll)是支持TLS 1.2的最新版本,旧版本OpenSSL无法适配服务器要求。

3. 规范FTPS连接流程

如果使用显式FTPS(默认端口21),必须在登录前完成TLS握手,正确流程如下:

IdFTP1.Host := '你的FTP服务器地址';
IdFTP1.Port := 21;
IdFTP1.Username := '你的用户名';
IdFTP1.Password := '你的密码';
IdFTP1.Passive := True; // 推荐使用被动模式,避免端口映射问题

// 绑定SSLIOHandler
IdFTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;

try
  IdFTP1.Connect;
  IdFTP1.AuthTLS; // 启用显式TLS加密,这一步不能省略
  IdFTP1.Login;
  IdFTP1.Protection := ftpsPrivate; // 设置保护级别
  IdFTP1.List; // 此时调用List即可正常执行
finally
  IdFTP1.Disconnect;
end;

如果使用隐式FTPS(端口990),无需调用AuthTLS,但要确保端口设置正确,且SSLIOHandler在连接时自动启用加密。

4. 核对FileZilla服务器设置

进入FileZilla服务器管理界面,确认:

  • TLS设置中最低版本为1.2(与你当前配置一致)
  • 保护级别设置为“强制私有”或允许私有级别,确保服务器接受P级保护的连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:40:09