我的代码(运行时使用-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:远程主机关闭连接
握手期间
在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:否(否); FnC:N; RIC:0100;
简历:S(102400); CalcS:是的;遮罩:。 536 TM:B;克莱尔:不;
RemEOF:否; RemBOM:否; CPS:0;仅适用于: InclM :;简历:0536
AscM:*。* html; * .htm; *。文本文件; * .php; * .php3; * .cgi; *。C; * .cpp; *。H;
* .pas; * .bas; * .tex; * .pl; * .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伊尼西亚多
carregamento de C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql
560 TYPE I 562200 Type设置为I 563 PASV 568227输入被动
模式(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位
RSA,ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx = ECDH Au = RSA
Enc = AESGCM(256)Mac = AEAD 580ConexãoSSL estabelecida 586226
已成功转移“ /cliente-dados.sql”586 MFMT 20161006163429
cliente-dados.sql 590213 Modify = 20161006163429; /cliente-dados.sql
590 Carregamento bem-sucedido 591完成转让:
'C:\ Users \ trescon.jramos \ Documents \ cliente-dados.sql'[4869]
最佳答案
您正在连接到端口990,这是隐式FTPS端口。但是,您正在将false
传递给isImplicit
constructor的FTPSClient
参数。
如果确实要使用隐式FTPS,请通过true
:
FTPSClient ftpClient = new FTPSClient("TLS", true);
或者实际上,您应该真正使用显式FTPS和默认FTP端口21(因为隐式FTPS是非标准的旧版兼容性黑客):
FTPSClient ftpClient = new FTPSClient();
// ...
ftpClient.connect("myhost");
换句话说,使用FTPS所需要的只是使用
FTPSClient
,不需要其他参数或调用。