我正在使用Apache Commons FTP 库在我的 Android 应用程序中
我通过 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);
我很感激任何帮助,谢谢。
你的情况的问题是Apache FTPS 客户端不支持 TLS 会话恢复,因此当您尝试传输文件时会失败。
了解问题
当您通过 TLS 连接到 FTP 服务器时,服务器会启动安全 SSL 会话与客户在控制连接。然后客户端输入被动模式通过发送PASV
命令和响应,服务器打开一个随机非特权端口,并将端口号发送到客户端作为响应。该端口代表数据连接。现在,要安全地连接到这个新端口,客户端必须重用它与服务器上已有的现有 TLS 会话。控制连接.
为什么要重用 TLS 会话?
不需要会话恢复就允许会话窃取攻击。 FTP 的问题在于数据连接不对客户端进行身份验证。
如果服务器/客户端不重用现有的 TLS 会话,攻击者可能会连接到数据端口并上传恶意软件。因此,为了防止此类攻击,FTP 服务器要求客户端重用已建立的会话。
就你而言,Apache FTPS 客户端无法重用会话(这是一个已知问题),因此服务器thinks您的客户未经授权并拒绝转账。
结帐财富前沿帖子关于如何修补和示例实现。
Sources:
- 财富前线[link]
- 松弛网站 [link]
- FileZilla 论坛 [link]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)