服务端实现代码
采用apache ftpserver实现
依赖
<dependencies>
<dependency>
<groupId>org.apache.ftpserver</groupId>
<artifactId>ftpserver-core</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
ExplicitFTPSServer
开启隐式ssl连接
package com.macrosan;
import org.apache.ftpserver.DataConnectionConfigurationFactory;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
import org.apache.ftpserver.usermanager.PasswordEncryptor;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import java.io.File;
public class ExplicitFTPSServer {
public static void main(String[] args) {
try {
// 创建 FTP 服务器工厂
FtpServerFactory serverFactory = new FtpServerFactory();
// 设置监听器
ListenerFactory factory = new ListenerFactory();
// 设置监听器仅绑定 IPv4 地址
factory.setServerAddress("0.0.0.0");
// 配置 SSL
SslConfigurationFactory ssl = new SslConfigurationFactory();
ssl.setKeystoreFile(new File("/root/ftp-test/keystore.jks")); // 替换为您的keystore文件路径
ssl.setKeystorePassword("123456"); // 替换为您的keystore密码
factory.setSslConfiguration(ssl.createSslConfiguration());
factory.setImplicitSsl(false); // 设置为显式 SSL
// 配置数据连接
DataConnectionConfigurationFactory dataConFactory = new DataConnectionConfigurationFactory();
dataConFactory.setPassivePorts("1200-1210"); // 设置数据连接端口范围
factory.setDataConnectionConfiguration(dataConFactory.createDataConnectionConfiguration());
// 设置监听器端口
factory.setPort(21); // 显式 FTPS 使用 21 端口
Listener explicitSslListener = factory.createListener();
serverFactory.addListener("default", explicitSslListener);
// 设置用户管理
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File("users.properties")); // 用户配置文件
PasswordEncryptor passwordEncryptor = new ClearTextPasswordEncryptor();
userManagerFactory.setPasswordEncryptor(passwordEncryptor);
serverFactory.setUserManager(userManagerFactory.createUserManager());
// 启动服务器
FtpServer server = serverFactory.createServer();
server.start();
System.out.println("FTP 服务器启动,显式 FTPS 端口: 21");
} catch (Exception e) {
e.printStackTrace();
}
}
}
users.properties
# admin user
ftpserver.user.admin.userpassword=admin
ftpserver.user.admin.homedirectory=/root/ftp-test/ftpserver # 修改目录
ftpserver.user.admin.enableflag=true
ftpserver.user.admin.writepermission=true
ftpserver.user.admin.maxloginnumber=10
ftpserver.user.admin.maxloginperip=2
ftpserver.user.admin.idletime=300
客户端连接
客户端使用FileZilla,下载链接:filezilla-project.org/download.ph…