首页 > 解决方案 > 带有 FTP 登录错误的 HTTPS 客户端:javax.net.ssl.SSLException: 502 SSLv23/TLSv1 java

问题描述

我对 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)

标签: javasslftpapache-commonstumbleweed

解决方案


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

这并不奇怪:端口 443 是 HTTPS,与 FTP 完全无关。端口 20 是用作与 FTP 的数据连接源的数据端口,但不是需要连接的端口。端口 21 是 FTP 控制端口,即这是实际预期的连接端口。

哎呀!发生错误 javax.net.ssl.SSLException: 502 SSLv23/TLSv1 at org.apache.commons.net.ftp.FTPSClient.execAUTH(FTPSClient.java:242)

此处AUTH TLS使用的命令是客户端用来将普通 FTP 连接(根据端口 21 的要求)升级到 FTPS,即 FTP over TLS。类似于 STARTTLS 将普通 SMTP 连接升级为 SMTP over TLS。

AUTH TLS期望来自服务器的成功响应代码。相反,它得到代码 502,代表“命令未实现”。这仅仅意味着您与之交谈的 FTP 服务器不支持 FTP over TLS,并且您无法从客户端执行任何操作来强制执行此操作。

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

我对Java很陌生...

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


推荐阅读