相关疑难解决方法(0)

使用 OpenSSL 在 FTP 传输连接上恢复 TLS/SSL 会话

我是实现 FTP 客户端 ( WinSCP )的开源开发人员。

我正在尝试从传输套接字上的 FTP 控制套接字恢复 TLS/SSL 会话。一些 FTP 服务器开始要求这样做。

例如 vsftpd:
https://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html


我正在使用 OpenSSL 来实现 SSL 层。

我尝试了明显的方法来实现会话恢复,即使用SSL_get1_sessionand SSL_set_session,如下所示: https:
//www.linuxjournal.com/article/5487

虽然它不起作用。我仍然无法连接到任何需要 TLS 会话恢复的 FTP 服务器(例如 vsftpd)。

我怀疑问题可能是由于在我的情况下有两个并行 TLS 连接而无法共享相同的 TLS 会话。这与 linuxjournal.com 上的示例不同,其中第一个连接在另一个连接打开之前关闭。

我还尝试了几种克隆会话的方法,例如使用i2d_SSL_SESSION/ d2i_SSL_SESSION。也没有帮助。

我真的被困在这里了。

预先感谢您的任何帮助。

ftp ssl session resume openssl

7
推荐指数
1
解决办法
3742
查看次数

使用FTPS将文件从android传输到服务器

我在我的Android应用程序中使用Apache Commons FTP库

我通过FTPS建立连接,虽然它与服务器完美连接,但在传输文件时遇到问题.

出于安全原因,订购应用程序的客户端在使用PROT P时请求在数据连接上恢复TLS会话.

因此,我在服务器上启用了此选项:

在此输入图像描述

正如我所说,我可以连接到服务器,但不能传输文件. 如果我取消激活"使用PROT P时数据连接上所需的TLS会话恢复"框,则传输正常.

我正在寻找一种使用库进行文件传输的方法,但是没有成功,我知道必须有一种方法.

我给你相关代码的一部分:

TransferImagenesFTP.ftpClient = new FTPSClient();

TransferImagenesFTP.ftpClient.connect(InetAddress.getByName("XXX_XXX_XX_X"), 26);
TransferImagenesFTP.ftpClient.enterLocalPassiveMode();
TransferImagenesFTP.ftpClient.setBufferSize(1024000);
TransferImagenesFTP.ftpClient.login("xxxxxx", "zzzzzz");
TransferImagenesFTP.ftpClient.execPROT("P");
TransferImagenesFTP.ftpClient.type(FTP.BINARY_FILE_TYPE);
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助,谢谢.

java android ftp-client ftps apache-commons-net

7
推荐指数
1
解决办法
1222
查看次数

JDK 8u161 中 Apache FTPS 客户端中的 SSL 会话重用

使用 Apache Commons-NetFTPSClient连接到现代 FTP/S 服务器不起作用。原因是它们需要 SSL 会话重用,即来自控制连接的 SSL 会话需要重新用于数据连接。

这通常可以在服务器中停用,但那是

  • 没有安全感
  • 并不总是一个选项(因为服务器可能不受您的控制)

正确的解决方案是让客户端实际重用会话。Commons-Net有一个开放的错误,但它看起来不会很快得到解决。

此外,还有一个由 Cyber​​duck(一个 FTP 客户端应用程序)的作者创建的“反射黑客”,在他们的错误跟踪器中进行了描述,更深入地在博客文章中进行了描述StackOverflow 上还有一篇相关的文章描述了这个解决方案。他们使用反射来访问 JDK 的内部缓存SSLSessionContext并注入一个新条目。

在 JDK 8u161 和 9.0.4 (?) 之前,此 hack 一直运行良好,其中引入了一些更改日志中描述的 SSL更改。显然,一些实现细节发生了变化,导致黑客不再起作用。

据我所知,现在有以下选项:

  • 继续使用 JDK 8u152,直到有人找到解决方案/apache-commons-net 被修补/JDK 更改被回滚(这不是一个真正的选择,因为这会切断生产系统的安全更新)
  • 使用不同的 FTPS 客户端(我能找到的唯一替代方案是专有的且相当昂贵)
  • 尝试对SSLSessionContext实现的更改进行逆向工程以找到新的解决方法。这不仅看起来像是一项不平凡的任务 - 解决方案可能会再次变得笨拙,因此随时可能再次崩溃。
  • 不再使用 FTP/S

任何人都可以建议如何在这里进行?


相关链接:

java ftp ftps apache-commons-net

5
推荐指数
1
解决办法
3696
查看次数

如何建立与 FileZilla Server 1.2.0 的 FTPS 数据连接

使用 Apache commons-net 的 Java FTPSClient 进行会话恢复是一个已知问题。会话恢复是 FTPS 服务器数据连接所需的一项安全功能。Apache FTPSClient 不支持会话恢复,并且 JDK API 使得构建自定义实现变得困难。有一些使用反射的解决方法,请参阅此答案和此commons-net bug 条目

我在 JDK 11 中使用了这样的解决方法(请参阅下面的片段),并针对本地 FileZilla 服务器对其进行了测试。它适用于 FileZilla Server 0.9.6,但不适用于 FileZilla Server 1.2.0,这是撰写本文时的最新版本。在该版本中,当尝试建立数据连接时,服务器会响应:

425 Unable to build data connection: TLS session of data connection not resumed.
Run Code Online (Sandbox Code Playgroud)

正如我所说,FileZilla Server 0.9.6 适合我进行会话恢复的方式,并且我确保激活了要求会话恢复的设置。

在 FileZilla Server 1.2.0 中,此类设置现在是隐式设置的,无法通过 GUI 更改,也许根本不能更改。我可以调整一些服务器设置才能使其正常工作吗?或者是我如何实施解决方法的问题?有人遇到类似的问题吗?

这是我正在使用的解决方法:

public class FTPSClientWithSessionResumption extends FTPSClient {

    static {
        System.setProperty("jdk.tls.useExtendedMasterSecret", "false");
        System.setProperty("jdk.tls.client.enableSessionTicketExtension", "false");
    }

    @Override
    protected void _connectAction_() throws IOException {
        super._connectAction_();
        execPBSZ(0);
        execPROT("P"); …
Run Code Online (Sandbox Code Playgroud)

java filezilla ftps apache-commons-net session-reuse

5
推荐指数
1
解决办法
2386
查看次数

Java JSSE SSLEngine无法恢复SSL会话

我正在编写一个使用SSLEngine和NIO的应用程序,我编写了客户端和服务器.客户端能够连接到服务器,在他连接后,我希望他能够执行会话恢复/重新协商,但目前没有运气..

由于使用SSLEngine的代码非常大(SSLEngine的使用非常复杂!),我将编写一个简单的伪代码来演示这种情况:

Server:
    global sslcontext initialized once
    await new client
    client.sslEngine = create new server ssl engine using the global sslcontext
    client.handleHandshake and wait for it to be done
    handle client.

Client:
    global sslcontext initialized once
    sslEngine = create new client ssl engine using the global sslcontext
    performHandshake and wait for it to be done
    disconnect (close gracefully the connection)
    sslEngine = create new client ssl engine using the global sslcontext
    configure engine to not allow session creation
    performHandshake and …
Run Code Online (Sandbox Code Playgroud)

java ssl jsse sslengine

2
推荐指数
1
解决办法
2898
查看次数

Java FTPS 无法检索文件列表(FileZilla 客户端工作正常)

我使用带有 Java 8 的 Apache Commons Net (v3.5) 连接到远程 FTPS 站点(即在 Internet 上)。我可以在我的 Windows 10 机器上轻松连接 FileZilla 客户端,但我的 Java 程序无法完成相同的步骤。我在谷歌上搜索了高低,但找不到根本原因。以下是我已经确认的事情:

  • 我确保 Java FTP 命令与 FileZilla 客户端的顺序完全相同。
  • 我在 PC 上禁用了 Windows 防火墙和防病毒软件
  • 我重新启用了 Windows 防火墙并启用了日志记录。使用 FileZilla 时,Windows 防火墙日志会在建立被动模式连接时列出 TCP 连接。我在 Java 程序中没有看到这样的条目。
  • 我在我的 PC 上安装了 FileZilla 服务器。在我取消选中“使用 PROT P 时需要在数据连接上恢复 TLS 会话”后,java 程序运行。Java 例外是不同的,所以我不相信这是一个确凿的证据。
  • 我成功地针对 test.rebex.com 服务器运行了相同的代码。

以下是代码,非常感谢您的任何想法:

import java.io.IOException;
import java.io.PrintWriter;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;

public class testProgram {

  public static void main(String[] args) …
Run Code Online (Sandbox Code Playgroud)

java ftp ssl ftps apache-commons-net

0
推荐指数
1
解决办法
6675
查看次数