java - 带有 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)
解决方案
我尝试更改端口号(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 FTPSClient
but FTPClient
)或放弃。
我对Java很陌生...
这些都不需要任何Java知识。它只需要了解 FTP 和 FTPS 的工作原理。
推荐阅读
- python - 具有多个 DOCTYPE 声明的 XML
- sql - 如何在 SQL Server 的列中删除带有“空字符串”的行?
- javascript - 如果使用 JavaScript 未找到结果,如何显示“未找到结果”警报消息?
- python - 如何比较 Python 中 JSON 文件中字典中的数据键?
- python - 为什么我在 Python 中只收到 756 KiB 的 MemoryError?
- javascript - PaperJS 定位形状
- java - 在 quarkus qute 模板中插入 java 字符串常量?
- database - Slick Delete/Update DB Query 能否返回负整数值作为结果
- botframework - 无法访问基于版本的 LUIS 预测
- java - 元素点击被拦截异常:第二个下拉值没有被选中