Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过代理连接到FTPS_Java_Ftps - Fatal编程技术网

Java 通过代理连接到FTPS

Java 通过代理连接到FTPS,java,ftps,Java,Ftps,我们遇到的最初问题是,由于不受信任的服务器证书,常规FTPs下载开始失败。这促使我们怀疑证书是否已在交易对手未通知我们的情况下更新,因此我们希望下载当前证书并将其与密钥库中的证书进行比较 这似乎是一个比我们预期的更棘手的问题。通常的怀疑(firefox,filezilla,…)似乎无法通过FTP代理连接到FTPs服务器,因此出于好奇,我开始使用更低级的java方法。但我一辈子都不能让它工作 第一次(过于简单化的)java尝试: // create proxy connection

我们遇到的最初问题是,由于不受信任的服务器证书,常规FTPs下载开始失败。这促使我们怀疑证书是否已在交易对手未通知我们的情况下更新,因此我们希望下载当前证书并将其与密钥库中的证书进行比较

这似乎是一个比我们预期的更棘手的问题。通常的怀疑(firefox,filezilla,…)似乎无法通过FTP代理连接到FTPs服务器,因此出于好奇,我开始使用更低级的java方法。但我一辈子都不能让它工作

第一次(过于简单化的)java尝试:

    // create proxy connection
    SocketFactory plainFactory = SocketFactory.getDefault();
    Socket proxy = plainFactory.createSocket(proxyServer, proxyPort);

    // create ssl connection on top of it?
    SSLSocketFactory sslFactory = getSocketFactory();
    SSLSocket socket = (SSLSocket) sslFactory.createSocket(proxy, server, port, true);
这种方法显然行不通

接下来,我开始玩ftp4j(http://www.sauronsoftware.it/projects/ftp4j/)它似乎有一个干净且可访问的代码库:

    FTPClient client = new FTPClient();
    client.setConnector(new FTPProxyConnector(proxyHost, proxyPort));
    client.getConnector().setConnectionTimeout(0);
    client.getConnector().setReadTimeout(0);
    client.setSSLSocketFactory(getSocketFactory());
    // also tried SECURITY_FTPS
    client.setSecurity(FTPClient.SECURITY_FTPES);
    client.connect(server, port);
这将产生:

REPLY: 220 Blue Coat FTP Service
SEND: USER anonymous
REPLY: 530-User Access denied.
REPLY: 530-
REPLY: 530-Usage: USER username@hostname
REPLY: 331        PASS userpassword
Exception in thread "main" java.io.IOException: Invalid proxy response
代理服务器具有可选的身份验证,在我们的开发服务器上,我们通常使用“user@host“没有代理身份验证。因此,我假设用户名、主机名和密码是远程服务器的用户名、主机名和密码

因此,我尝试添加远程参数,但这不起作用:

REPLY: 220 Blue Coat FTP Service
SEND: USER test@ftps.example.com
Exception in thread "main" java.io.IOException: FTPConnection closed
添加代理用户以匹配bluecoat格式似乎也不起作用:

USER %u@%h %s
PASS %p
ACCT %w
非常欢迎对这两个问题中的任何一个提供帮助:

  • 如何通过ftp代理从ftps服务器检索服务器证书
  • 如何在java中通过ftp代理连接到ftps服务器

您可能想尝试ApacheNetCommons libs

下面是一个使用NetCommons库的线程

NetCommons还有一个功能齐全的FTP客户端,因此您可以使用您知道有效的东西进行测试