我正在尝试使用ftp4j lib从FileZilla FTP servcer中获取带有TLS的文件列表。
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);
}
}
我有个例外
线程“main”it.sauronsoftware.ftp4j.ftpexception异常[代码=450,消息=TLS数据连接会话未恢复或会话与控制连接不匹配]位于ftp.main(ftp.java:49)的it.sauronsoftware.ftp4j.ftpclient.listnames(ftpclient.java:2407)
我尝试使用活动模式,但它也没有帮助(ping命令后失败)
线程“main”it.sauronsoftware.ftp4j.ftpexception中出现异常[代码=421,消息=被拒绝的命令,请求的IP地址与控制连接IP不匹配。]
你能回答我我做错了什么吗,或者ftp4j库实际上支持FTPE&TLS吗?
ftp4j库确实支持FTPS/TLS。如果不是这样,您将不会得到一个错误在一开始。
FileZilla FTP服务器是一种FTP服务器,它要求客户端将来自FTP控制连接的TLS/SSL会话用于数据连接:
https://svn.filezilla-project.org/FileZilla?view=revision&revision=6661
这使得攻击者更难劫持数据连接,从而提高了安全性。
我不知道,如果ftp4j支持重用这个虽然。
替代解决方案有:
嗨,我正试图通过ssh隧道连接到服务器上的数据库,但我甚至无法连接Jsch会话。我试图在GWT中作为我的后端代码的一部分来做这件事。这是服务器端代码的实现部分。我对服务器一般不是那么熟悉。通常在端子I类型中: ssh-x username@xxxx.xxx.edu 然后系统提示我输入密码,我输入密码,然后我就进入了。 所以在java中我的代码如下: 我已经双重检查了用户名、密码和主机字符串,它们都
似乎正在发生的事情(这是我第一次处理FTP,尽管我以前处理过普通的FTP),是服务器在控制连接和数据连接上确保身份验证和加密的方式是,在建立控制连接和身份验证的“正常”TLS连接发生之后,每个数据连接都需要客户端与相同的TLS会话进行连接。这对我来说是有意义的,因为它应该如何工作,但Apache Commons Net FTPS实现似乎没有做到这一点。它似乎试图建立一个新的TLS会话,因此服务器拒
问题内容: 一个只有一个数据库的hibernate会话将保持多少个连接? 问题答案: 在给定的时间,给定的会话将仅保留一个连接,您可以使用connect()方法进行访问。 使用reconnect()方法可以更改所使用的连接。
我有一个cordova应用程序,我有一个登录页面和一个登录用户的内页。每当用户会话消失时,它就会请求登录信息。如何防止ths cordova应用程序在重启移动应用程序时删除会话uppon重启或恢复cookie和会话信息?所以登录屏幕不会每次都出现?
我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程
我是ElasticSearch的新手,我遵循这里的说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html 每当我运行“docker compose up”时,Kibana总是说“无法恢复连接”,但如果我运行curlhttp://localhost:9200,我会得到回复: 下面是我的docker