2012-09-19 3 views
4

데이터 채널에서 암호화가 필요한 FTP- 서버 (ProFTPD 1.3.3a)에서 FTPClient로 데이터를 읽는 데 문제가 있습니다. 모든 것은 다른 서버에서 암호화없이 잘 작동합니다.Apache Commons FTPSClient를 사용하는 "550 SSL/TLS가 데이터 채널에 필요함"

내 코드입니다 : I 출력에서 ​​얻을 무엇

FTPSClient ftpsClient = new FTPSClient("TLS", false); 
log.debug("using TLS"); 
FTPClientConfig ftpClientConfig = new FTPClientConfig(FTPClientConfig.SYST_UNIX); 
ftpClientConfig.setServerLanguageCode("de"); 
ftpsClient.configure(ftpClientConfig); 
ftpsClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); // outputs all conversation to the console 
ftpsClient.connect(host, 21); 
ftpsClient.login(username, password); 
ftpsClient.enterLocalPassiveMode(); 
ftpsClient.changeWorkingDirectory(pathname); 
listNames = ftp.mlistDir(); 
ftpsClient.logout(); 

220 ProFTPD 1.3.3a Server (xxx) [xxx] 
AUTH TLS 
234 AUTH TLS successful 
USER xxx 
331 Password required for xxx 
PASS xxx 
230 User xxx logged in 
CWD /www/catalog 
250 CWD command successful 
PASV 
227 Entering Passive Mode (xxx). 
MLSD 
550 SSL/TLS required on the data channel 
QUIT 
221 Goodbye. 

데이터 채널에 TLS/SSL을 사용하도록 FTPSClient를 구성하는 방법에 대해 어떤 생각인가? 귀하의 도움을 주시면 감사하겠습니다!

답변

11

데이터 채널을 통해 데이터를 전송할 명령을 실행하기 전에 데이터 채널 암호화를 활성화해야합니다 (예 : LIST).

서버에 연결 한 후 코드에 이것을 추가
// Set protection buffer size 
ftpClient.execPBSZ(0); 
// Set data channel protection to private 
ftpClient.execPROT("P"); 

는 적어도,이 (proftpd에 사용) 내 문제를 해결했다.

+0

감사합니다. 이것은 절대적으로 내 문제를 해결했다 !!! – Randy

관련 문제