当前位置: 首页 > 知识库问答 >
问题:

apache commons ftp连接明文但授权SSL

牟恺
2023-03-14

我试图使用Apache Commons Net库连接到FTP服务器,其中初始连接是纯文本(和文件列表),但授权和数据搬迁是SSL。我已经使用CoreFTP验证了这是服务器的实际行为。如何使用Apache Commons库完成此操作。

如果我使用普通的FTPClient,我可以得到一个连接,但是我得到了这样一条消息: 503用户:服务器策略要求所有客户端都受到保护。

如果我用这种方式尝试FTPSClient

FTPSClient l_ftp = new FTPSClient("SSL", true);
l_ftp.setAuthValue("SSL");
l_ftp.connect(l_host, l_port);

我得到这个错误:javax.net.ssl.SSLExctive:无法识别的SSL消息,明文连接?

这有点道理,因为服务器需要纯文本连接,而客户端正在尝试SSL。

如果我试试这个

FTPSClient l_ftp = new FTPSClient("SSL", false);
l_ftp.setAuthValue("SSL");
l_ftp.connect(l_host, l_port);

我得到这个:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly

我认为这可能意味着大致相同,服务器需要纯文本,客户端需要SSL。

Apache Commons库甚至可以做到这一点吗?

这里是CoreFTP日志

Welcome to Core FTP, release ver 2.2, build 1857 (x64) -- © 2003-2014
WinSock 2.0
Mem -- 2,096,632 KB, Virt -- 8,589,934,464 KB
Started on Monday October 26, 2015 at 14:18:PM
Resolving nnnnnnn.nnnnn.com...  
Connect socket #900 to 222.222.222.222, port 21...
220 CONNECT:Enterprise Gateway 2.0.02. S48 FTP Server ready...  15:18:25  10-26-2015  
AUTH SSL  
234 AUTH: command accepted. Securing command channel ...  
TLSv1, cipher TLSv1/SSLv3 (RC4-MD5) - 128 bit
USER omitted  
331 Password required for omitted.  
PASS **********  
230 User omitted logged in. Session Id: 25846.  
PBSZ 0  
200 PBSZ command accepted.  
PROT C  
534 PROT Request denied for policy reasons.  
PROT cmd failed...
CCC  
200 CCC command channel is no longer secured.  
SYST  
502 Command not implemented.  
Keep alive off...
PWD  
257 "omitted" is the current working Mailbox ID.  
PASV  
227 PASV Entering passive mode (209,95,224,76,121,95).  
LIST  
Connect socket #940 to 209.95.224.76, port 31071...
150 Opening data connection.  
226 Transfer complete. 0 Bytes sent.  
Transferred 0 bytes in 0.008 seconds  

共有1个答案

别浩漫
2023-03-14

事实证明,这是我运行的应用服务器中的某种库或其他冲突。当我把测试代码放到一个独立的项目中时,它运行得很好。为子孙后代着想,以下是工作代码。

FTPSClient l_ftp = new FTPSClient("SSL", false);
l_ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
l_ftp.setAuthValue("SSL");

l_ftp.connect(l_host, l_port);

if (!l_ftp.login(l_username, l_password)) {
  // BAD!
}

l_ftp.execPBSZ(0L);
l_ftp.execCCC();
l_ftp.pwd();

// DO STUFF

l_ftp.logout();
l_ftp.disconnect();
 类似资料:
  • 我正在尝试与URL(python客户端)建立websocket连接,该URL需要传入jwt令牌,服务器(在GO中实现)在上侦听该请求,并应该通过解析令牌进行身份验证。 我试着用这部分代码来提出请求- 此请求命中运行此代码以验证此请求的服务器 func ParseFromRequest(req*http.Request,keyFunc-keyFunc)(令牌*令牌,错误){ } 每次,我都会得到“E

  • 尝试使用EWS连接到exchange 2010 SP1 它连接到我的本地邮箱,而不是“测试邮箱”。我从我们的管理员那里获得了TestMailbox NT帐户的密码,并尝试了以下所有方法: 所有这些都失败了。假设我在本地网络上的NT用户名是“用户”,我甚至尝试过: 它失败了。我一直在使用以下链接作为参考。 编辑1:我已经尝试了以上所有与网络信用而不是网络信用,它仍然失败。

  • 我正在使用“mongo xx.xx.xx.xxx:27017”连接到远程mongo服务器 它连接没有问题。但是当尝试使用db.auth({用户名,密码})进行身份验证时,它会给出0。 但当我转到那个远程机器,在那里运行一个本地客户端,然后尝试身份验证时。它很好用。 请帮忙。可能是什么问题

  • 功能说明 目睹直播提供了一系列的授权观看方式,如密码验证,付费观看等,然而由于客户业务的多样性,实现如:接入客户自身账户体系,登陆OA系统后再跳转到目睹观看直播等一系列更高级的授权观看方式,此时就需要使用自定义授权。 自定义授权逻辑图 功能设置 首先,需在 某个频道 - 频道管理 - 授权观看 - 授权类型 中点击自定义授权,并输入您希望在观众进入观看页时跳转的链接,如: http://your-

  • 我有几个问题。 使用授权代码流时,我是否需要在客户端验证随机数?在一般的OAuth提供程序实现中,从授权代码获取访问令牌的过程只工作一次。由此看来,授权码流在不使用随机数的情况下,已经支持重放攻击了? 在web应用程序中使用授权代码流有什么好处?ID令牌是一种身份验证机制,而不是授权机制,据我所知,它用于验证哪个OpenID提供者正在为哪个中继方验证哪个用户。 但在授权代码流中, OAuth 2.

  • 我试着连接到谷歌云物联网MQTT Brocker。我没有被授权连接(5)作为Java客户端的异常。 使用以下回购的示例代码。https://github.com/googlecloudplatform/java-docs-samples/tree/master/iot/api-client/mqtt_example