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

启用FTPS时触发(425)无法打开数据连接错误求助

问题原因及解决办法

核心原因

FtpWebRequest对FTPS的支持存在兼容性缺陷:

  • 启用SSL后,它默认的被动模式(PASV)数据连接加密逻辑不完善,导致服务器无法建立数据链路,触发425 Can't open data connection错误。
  • 部分FTP服务器在FTPS模式下仅允许被动模式传输,但FtpWebRequest的SSL数据连接协商过程存在短板,容易被服务器安全策略拦截。
  • 该类的FTPS实现较为老旧,对现代FTP服务器的协议适配性远不如FluentFTP这类第三方库。

解决办法

1. 强制配置FTPS被动模式及加密规则

在创建FtpWebRequest实例后,显式添加以下配置(必须在调用GetRequestStream()前完成):

var ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://your-server/path/file");
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.EnableSsl = true;
ftpRequest.UsePassive = true; // 强制被动模式
ftpRequest.UseBinary = true; // 二进制传输避免编码问题
// 指定兼容的TLS版本,适配服务器要求
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

2. 替换为FluentFTP客户端(推荐方案)

既然已验证FluentFTP可正常完成FTPS上传,直接替换是最省心的方案,示例代码:

using FluentFTP;
using System.IO;

var client = new FtpClient("your-server", "username", "password");
client.EnableSsl = true;
client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
client.Connect();

using (var localStream = File.OpenRead("local-file-path"))
{
    client.Upload(localStream, "remote-file-path");
}

client.Disconnect();

FluentFTP会自动处理FTPS的被动模式协商、数据连接加密等细节,兼容性和稳定性远超原生FtpWebRequest。

3. 辅助排查:服务器端配置确认

虽然FileZilla可正常上传,但可快速核对:

  • 服务器是否开启了FTPS被动模式端口段(如50000-51000)。
  • 服务器防火墙是否开放了上述被动端口及FTP控制端口(默认21)的SSL流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:12