【问题标题】:FTP Client upgrade from TLS 1.0 to TLS 1.2FTP 客户端从 TLS 1.0 升级到 TLS 1.2
【发布时间】:2018-08-27 09:59:04
【问题描述】:

我们公司已从 TLS 1.0 升级到 TLS 1.2。在此之前,我们使用org.apache.commons.net.ftp.FTPClient下载文件。

现在我们无法使用FTPSclent 连接到服务器,并且出现异常:

org.apache.commons.net.ftp.FTPConnectionClosedException: 连接已关闭且无提示

如何正确连接到服务器。

完整的堆栈跟踪:

【问题讨论】:

  • 您能否将堆栈跟踪粘贴为文本而不是图像?它更容易阅读,也更容易搜索有类似问题的人。
  • 对我来说,它似乎更多是在网络方面,而不是在编码方面。似乎只有您升级的客户端和使用不兼容版本的服务器
  • 如果您迁移到 Java 8,默认情况下您将获得 TLS 1.2。如果您需要坚持使用 JRE 7,有两个选项,第一个是如果您有 Oracle 对 JVM 的支持,他们有一个包含它的特殊非公共构建。如果没有,您必须在代码中执行此操作。查看这篇文章以创建 SSL 上下文并强制使用 TLS 1.2 stackoverflow.com/questions/39157422/…
  • 仅供参考,大多数开关用于 HTTPS,不适用于 FTPS。有一些新的,但我认为它们是在 Java 8 或 Java 9 之前添加的。我从来没有让它们中的任何一个工作。

标签: java ftp tls1.2


【解决方案1】:

首先,按照javadoc的提示打开on SSL调试并尝试连接,然后检查输出(它默认记录到std out,你应该将它重定向到一个文件)。

分拣机答案

尝试-Dhttps.protocols=TLSv1.2 JVM 参数(这应该传递给您在调查期间使用的每个 java 代码,当然您也必须使用相同的 JRE)。

如果不起作用,请检查服务器证书,该证书应安装到 JRE 的默认密钥库 (cacerts) 或您可能使用的自定义密钥库中。

如果这没有帮助,请安装 JCE 扩展(如果没有 JCE,JRE 无法处理具有至少 2048 位密钥的证书)。

如果所有这些步骤都没有用,你可能会遇到和这个guy一样的问题。

加长版

我希望您至少使用Java7(请参阅每个平台上可用协议的表格)。

首先,服务器支持的和你的应用支持的 TLS 协议必须有交集。

table 中,您可以找到不同 JRE 版本的默认 TLS 协议,这很重要,因为您的客户端很可能使用 JRE 的默认 TLS。

因此,在您检查 JRE 并找到支持的 TLS 版本后,您应该检查应用的密码。

您应该使用nmap 测试您的连接: nmap.exe --script ssl-enum-ciphers -p <port> <ftp host> 使用此工具,您可以列出 TLS 版本和使用的密码。密码列表可以与这个小javacode提供的列表进行比较。这两个列表必须至少有一个共同点才能进行通信。

您可以使用Portecle 下载服务器的证书,该证书应安装在您的客户端 JRE 的密钥库中。

如果您发现它们在 TLS 协议和密码中也有交集,那么您的密钥库中有正确的证书,您可以测试它们是否可以与之通信 SSLPoke

如果这也有效,那么问题应该出在 FTPClient 上。

【讨论】:

  • ftp服务器是其他公司提供的,我应该从他们那里得到keystore?
  • 您必须获取连接使用的证书。使用 portecle 并使用检查连接功能会更快,您可以在其中提供主机和端口,并且可以检查和下载使用的证书。这些证书应导入客户端的密钥库。
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 2019-12-13
  • 2015-10-13
  • 1970-01-01
  • 2020-03-19
  • 2017-09-25
  • 2018-10-17
  • 2018-08-06
相关资源
最近更新 更多