启用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
相关产品推荐
相关产品推荐

