使用Java连接FTPS服务器

Yep,是FTPS服务器,并不是FTP或者是SFTP。

当你看到这篇文章的时候,应该已经遇见了一些头疼的问题,恰巧我在开发中遇见需要使用FTPS服务器的场景也遇到了,所以写下这篇记录比较靠谱的解决方案。

由于我对于FTPS协议并不是非常熟悉,并不针对这些协议做过多“民科”,在此只提供一个可行的解决方案,以解决可能遇见如javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake这样的异常。

直接上 StackOverflow地址 吧,看这个足够,实在是太忙了,有苦说不出,没时间整理齐备,有时间再贴出来完整代码。下面说一些需要注意的。

连接FTPS服务器建议使用 Apache Commons Net 框架,截至我开发完成时,该框架最新release版本为3.7,截至发帖时已经更新至3.7.1以及3.7.2版本,由于我只测试到3.7,并且已经验证3.6版本能够正常工作,所以本处推荐使用3.6版本,并根据上述 StackOverflow地址 重写_prepareDataSocket_()方法,如果你有测试最新版本欢迎告诉我结论。

Java建议使用JDK 8u161+版本,如果生产环境的Java版本不宜更改,那么可能需要设置JVM参数:

-Djdk.tls.useExtendedMasterSecret=false

具体原因参见 JDK发布说明

总结:确保使用合适的Java以及 Apache Commons Net 版本,再配合 StackOverflow地址 中提到的重写prepareDataSocket()方法。

发表评论

邮箱地址不会被公开。 必填项已用*标注