java – 使用Apache Commons FTPSClient在“数据通道上需要550 SSL / TLS”

我在FTP服务器(ProFTPD 1.3.3a)上使用FTPClient读取数据时遇到问题,需要对数据通道进行加密.一切正常,没有加密在其他服务器上.

我的代码是:

FTPSClient ftpsClient = new FTPSClient("TLS",false);
log.debug("using TLS");
FTPClientConfig ftpClientConfig = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
ftpClientConfig.setServerLanguageCode("de");
ftpsClient.configure(ftpClientConfig);
ftpsClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); // outputs all conversation to the console
ftpsClient.connect(host,21);
ftpsClient.login(username,password);
ftpsClient.enterLocalPassiveMode();
ftpsClient.changeWorkingDirectory(pathname);
listNames = ftp.mlistDir();
ftpsClient.logout();

我从输出中得到的是

220 ProFTPD 1.3.3a Server (xxx) [xxx]
AUTH TLS
234 AUTH TLS successful
USER xxx
331 Password required for xxx
PASS xxx
230 User xxx logged in
CWD /www/catalog
250 CWD command successful
PASV
227 Entering Passive Mode (xxx).
MLSD
550 SSL/TLS required on the data channel
QUIT
221 Goodbye.

知道如何配置FTPSClient在数据通道上使用TLS / SSL吗?非常感谢您的帮助!

解决方法

在执行将通过数据通道传输数据的任何命令(例如LIST)之前,必须启用数据通道加密.

连接到服务器后将其添加到您的代码中:

// Set protection buffer size
ftpClient.execPBSZ(0);
// Set data channel protection to private
ftpClient.execPROT("P");

至少,这解决了我的问题(使用proftpd).

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量