我正在尝试使用ftp4j库从TLS的FileZilla FTP服务器获取文件列表。
import it.sauronsoftware.ftp4j.FTPClient;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.util.Arrays;
public class FTP {
public static void main(String args[]) throws Exception {
System.setProperty("http.protocols", "TLSv1,TLSv1.1,TLSv1.2");
//tried to avoid closing connection during the handshake
//load and set certificate
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream("mykeystore.jks"), "root12".toCharArray());
FTPClient client = new FTPClient();
SSLContext sslContext = null;
try {
javax.net.ssl.TrustManagerFactory tmf = javax.net.ssl.TrustManagerFactory
.getInstance(javax.net.ssl.KeyManagerFactory
.getDefaultAlgorithm());
tmf.init(keyStore);
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), new SecureRandom());
} catch (Exception e) {
e.printStackTrace();
}
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
client.setSSLSocketFactory(sslSocketFactory);
client.setSecurity(FTPClient.SECURITY_FTPES);
client.setCharset("UTF-8");
client.setPassive(true);
String[] arg = client.connect("localhost", 21);
System.out.println(Arrays.toString(arg));
client.login("admin", "pass"); //OK
client.noop(); // aka Ping is OK
String s = client.currentDirectory(); //OK
client.changeDirectory("/"); //OK
String[] files = client.listNames(); //Exception here
System.out.println(Arrays.toString(files));
client.disconnect(true);
}
}我有个例外
线程“it.sauronsoftware.ftp4j.FTPException”it.sauronsoftware.ftp4j.FTPException code=450中的异常,数据连接的message= TLS会话没有恢复,或者会话与FTP.main at FTP.main(FTP.java:49)的控制连接不匹配。
我尝试使用活动模式,但它也没有帮助(在ping命令之后失败)
异常线程"main“it.sauronsoftware.ftp4j.FTPException code=421,message=拒绝命令,请求的IP地址不匹配控制连接IP。
请您回答我做错了什么,还是ftp4j库实际上支持FTPES & TLS?
具有FileZilla服务器TLS配置的屏幕截图:

发布于 2017-11-10 17:05:30
ftp4j库确实支持FTPS/TLS。如果没有,您就不会从一开始就得到错误。
FileZilla FTP服务器是FTP服务器之一,它要求客户端重用来自FTP控制连接的TLS/SSL会话,用于数据连接:
https://svn.filezilla-project.org/filezilla?view=revision&revision=6661
这使得攻击者更难使用劫持数据连接,从而增加了安全性。
不过,我不知道ftp4j是否支持重用。
其他解决办法是:
发布于 2017-11-13 14:10:43

试着移除这个复选框它帮了我。
https://stackoverflow.com/questions/47227095
复制相似问题