具有FTP登录错误的HTTPS客户端:javax.net.ssl.SSLException:502 SSLv23 / TLSv1 java

时间:2018-06-15 03:08:39

标签: java ssl ftp apache-commons tumbleweed

我对Java很陌生,所以你解释的越多,我学的越多,我会问的问题就越少;)我正在尝试编写一个客户端连接到ftp.availity.com,但我不能为我的生活让客户登录。我已经尝试更改端口号(443,20等),但它们都没有在控制台日志中返回响应,它只返回超时错误。唯一可以得到一些操作的是端口21.我知道这是FTP,我认为可能是错误来自哪里,但我不知道如何纠正它,因为显然更改端口#不会纠正问题。任何帮助,将不胜感激!

这是我的代码:

import java.io.IOException;
import org.apache.commons.net.ftp.*;

public class FTPApp {
private static void showServerReply(FTPSClient ftpClient) {
    String[] replies = ftpClient.getReplyStrings();
    if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
        }
    }
}

public static void main(String[] args) {

    String server = "ftp.availity.com";
    int port = 21;
    String user = "user";
    String pass = "pass";
    FTPSClient ftpClient = new FTPSClient();

    try {
        ftpClient.connect( server, port);   
        showServerReply(ftpClient);
        int replyCode = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(replyCode)) {
            System.out.println("Operation failed. Server reply code: " + replyCode);
            return;
        }
        boolean success = ftpClient.login(user, pass);
        showServerReply(ftpClient);
        if (!success) {
            System.out.println("Could not login to the server");
            return;
        } else {
            System.out.println("LOGGED IN SERVER");
        }
    } catch (IOException ex) {
        System.out.println("Oops! Something wrong happened");
        ex.printStackTrace();
    }
}

}

这是错误:

Oops! Something wrong happened
javax.net.ssl.SSLException: 502 SSLv23/TLSv1
at org.apache.commons.net.ftp.FTPSClient.execAUTH(FTPSClient.java:242)
at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:225)
at org.apache.commons.net.SocketClient._connect(SocketClient.java:244)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:202)
at FTPApp.main(FTPApp.java:23)

3 个答案:

答案 0 :(得分:1)

  

我尝试更改端口号(443,20等),但它们都没有在控制台日志中返回响应,只返回超时错误。我唯一能采取行动的是21号港口。

哪个不是suprpise:端口443是HTTPS,它根本与FTP无关。端口20是数据端口,用作与FTP的数据连接源,但不是需要连接的端口。端口21是FTP控制端口,即这是连接实际预期的端口。

  

糟糕!发生了一些错事   javax.net.ssl.SSLException:502 SSLv23 / TLSv1   在org.apache.commons.net.ftp.FTPSClient.execAUTH(FTPSClient.java:242)

此处使用的命令是AUTH TLS,客户端使用该命令将普通FTP连接(如端口21上所需)升级到FTPS,即FTP over TLS。它与STARTTLS类似,可通过TLS将纯SMTP连接升级到SMTP。

AUTH TLS期望服务器成功获得响应代码。相反,它获得代码502代表"命令未实现"。这只是意味着您与之通信的FTP服务器不支持FTP over TLS,并且您无法从客户端执行此任务。

如果您可以控制服务器,则需要配置服务器以获得TLS支持。如果您无法控制服务器,则可以使用普通的不受保护的FTP(即不是FTPSClientFTPClient)或放弃。

  

我对Java很新...

这些都不需要任何Java知识。它只需要了解FTP和FTPS如何工作。

答案 1 :(得分:0)

在这里添加我的评论,因为我没有足够的声誉(最近加入了stackoverflow :)。 从错误看,它似乎是SSL / TLS协商的问题,导致502返回代码。您可以将-Djavax.net.debug = all添加为jvm属性,以调试有关确切SSL协商问题的更多信息。

答案 2 :(得分:0)

我想出来了!

ftp.availity.com是我要去登录的网址,但是当把它放到主机上时,为了保证安全,我所要做的只是保留“FTPSClient”,但让主机“ ftps .availity.com“不仅仅是”ftp.availity.com“。

ftp服务器是在Axway SecureTransport或Tumbleweed下设置的,所以希望任何有相同问题的人都可以找到这个帖子!

非常感谢你帮助我!