FTP登录错误的HTTPS客户端:javax.net.ssl.SSLException:502 SSLv23/TLSv1 java
我对Java非常陌生,所以你解释的越多,我学到的越多,问的问题也就越少;我正试图编程一个客户端连接到ftp.availability.com,但我一生都无法让客户端登录。我尝试更改端口号443、20等,但它们都不会在控制台日志中返回响应,它只返回超时错误。我唯一可以使用的是端口21。我知道这是FTP,我认为这可能是错误的来源,但我不知道如何纠正它,因为显然更改端口并不能纠正问题。任何帮助都将不胜感激 这是我的密码:FTP登录错误的HTTPS客户端:javax.net.ssl.SSLException:502 SSLv23/TLSv1 java,java,ssl,ftp,apache-commons,tumbleweed,Java,Ssl,Ftp,Apache Commons,Tumbleweed,我对Java非常陌生,所以你解释的越多,我学到的越多,问的问题也就越少;我正试图编程一个客户端连接到ftp.availability.com,但我一生都无法让客户端登录。我尝试更改端口号443、20等,但它们都不会在控制台日志中返回响应,它只返回超时错误。我唯一可以使用的是端口21。我知道这是FTP,我认为这可能是错误的来源,但我不知道如何纠正它,因为显然更改端口并不能纠正问题。任何帮助都将不胜感激 这是我的密码: import java.io.IOException; import org.a
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)
正在此处添加我的评论,因为我最近没有足够的声誉:。 从错误来看,似乎是SSL/TLS协商存在问题,导致返回502代码。您可以添加-Djavax.net.debug=all作为jvm属性来调试有关确切SSL协商问题的更多信息 我尝试更改端口号443、20等,但它们都不会在控制台日志中返回响应,它只返回超时错误。我唯一可以使用的是端口21 这一点也不奇怪:端口443是HTTPS,它与FTP完全无关。端口20是用作FTP数据连接源的数据端口,但不是需要连接的端口。端口21是FTP控制端口,即实际需要连接的端口 哎呀!出事了 javax.net.ssl.SSLException:502 SSLv23/TLSv1 位于org.apache.commons.net.ftp.FTPSClient.execAUTHFTPSClient.java:242 此处使用的命令是AUTH TLS,客户端使用该命令将端口21上的普通FTP连接升级为FTPS,即通过TLS的FTP。将普通SMTP连接升级为通过TLS的SMTP与STARTTLS类似 AUTH TLS期望从服务器获得成功的响应代码。取而代之的是代码502,它代表未实现的命令。这仅仅意味着与您交谈的FTP服务器不支持通过TLS的FTP,您无法从客户端强制执行此操作 如果您可以控制服务器,则需要为TLS支持配置服务器。如果您无法控制服务器,您可以使用无保护的普通FTP,即不是FTPSClient而是FTPClient,也可以放弃 我对Java还很陌生 所有这些都不需要任何Java知识。它只需要知道FTP和FTPS是如何工作的。我知道了 ftp.availity.com是我登录时要访问的url,但在为主机输入该url时,为了确保安全,我所要做的就是保留FTPSClient,但使主机ftps.availity.com不仅仅是ftp.availity.com ftp服务器是在Axway SecureTransport或Tumbleweed下设置的,因此希望有相同问题的任何人都能找到此线程
非常感谢你们帮助我 奇怪的错误。您通过SSL收到FTP错误502,这意味着“未实现命令”,这意味着SSL部分工作正常,这意味着它根本不是SSLException。这里没有。除非TLS协商工作正常,否则服务器无法返回502。否则,就没有传输它的通道。对于Apache来说,这是一个糟糕的例外选择。请注意,该错误是由AuthenitAction方法引发的,而不是TLS方法。如果使用普通FTP FTPClient,则会显示错误消息server:220 10.71.64.18 FTP server 5.3.6 ready。服务器:530 SSL是必需的。无法登录到服务器,我想它可能需要通过SSL而不是TLS连接,但我找不到有关如何实现这一点的任何信息。