我的代码(我在运行时使用-Dhttps.protocols=TLSv1.2
VM参数):
FTPSClient ftpClient = new FTPSClient("TLS", false);
ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
ftpClient.setAuthValue("TLS");
ftpClient.connect("myhost", 990);
ftpClient.login("mylogin", "mypassword");
堆栈追踪:
javax.net.ssl.SSLHandshakeException:远程主机关闭连接 在握手期间 at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:992)
//太多的痕迹......
引起:java.io.EOFException:SSL对等关闭不正确
在sun.security.ssl.InputRecord.read(InputRecord.java:505)
在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
......还有33个
从WinSCP登录(我可以使用WinSCP发送文件):
536将1个文件/目录复制到远程目录“/”536 PrTime: 是; PrRO:不; Rght:rw-r - r--; PrR:否(否); FnCs:N; RIC:0100; 简历:S(102400); CalcS:是的;面具:。 536 TM:B; ClAr:不; RemEOF:不; RemBOM:不; CPS:0; NewerOnly:不; InclM :;简历L:0 536 AscM:*。* html;的* .htm; *。文本; * .PHP; * .php3; * cgi的; *。C; *的.cpp; *。H; * .PAS; * .BAS; * .tex; *特等; * .js文件;的.htaccess; * .xtml; *的CSS; * .CFG; * .INI; * .SH; * .xml 539文件:'C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql' [2016-10-06T16:34:29.298Z] [4869] 557复制 “C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql”到远程 目录已启动。 560选择二进制传输模式。 560 Iniciando carregamento de C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql 560 TYPE I 562 200类型设置为I 563 PASV 568 227输入被动 模式(10,28,14,218,250,0)569 STOR cliente-dados.sql 569 Conectando a 10.28.14.218:64000 ... 575 150打开文件上传到服务器“/cliente-dados.sql”的数据通道579会话ID重用579使用 TLSv1.2,密码TLSv1 / SSLv3:ECDHE-RSA-AES256-GCM-SHA384,2048 bit RSA,ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx = ECDH Au = RSA Enc = AESGCM(256)Mac = AEAD580ConexãoSSLEstabelecida 586 226 成功转让“/cliente-dados.sql”586 MFMT 20161006163429 cliente-dados.sql 590 213 modify = 20161006163429; /cliente-dados.sql 590 Carregamento bem-sucedido 591完成转移: 'C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql'[4869]
答案 0 :(得分:0)
您正在连接到端口990,什么是隐式FTPS端口。但是,您正在将false
传递给FTPSClient
constructor的isImplicit
个参数。
如果您真的想使用隐式FTPS,请传递true
:
FTPSClient ftpClient = new FTPSClient("TLS", true);
或者实际上,您应该使用显式FTPS和默认FTP端口21(因为隐式FTPS是非标准的旧版兼容性黑客):
FTPSClient ftpClient = new FTPSClient();
// ...
ftpClient.connect("myhost");
换句话说,您需要使用FTPS只需使用FTPSClient
,不需要额外的参数或调用。