How to connect to FTP over TLS/SSL (FTPS) server in Java

Abdul Rafay picture Abdul Rafay · Mar 30, 2016 · Viewed 39.5k times · Source

I'm stuck in connecting to FTP over TLS/SSL (FTPS) server. I am using SimpleFTP library through am able to connect FTP server without SSL but could not connect FTPS.

It is giving me this error at line 2 (ftp.connect),

SimpleFTP received an unknown response when connecting to the FTP server:
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

and am using below code

SimpleFTP ftp = new SimpleFTP();

// Connect to an FTP server on port 21.
ftp.connect("xxx.xxx.xxx.xxx", 21, "username", "pwd");
//getting error at (ftp.connect) above line

// Set binary mode.
ftp.bin();

// Change to a new working directory on the FTP server.
ftp.cwd("web");
ftp.disconnect();

Answer

Martin Prikryl picture Martin Prikryl · Mar 30, 2016

The SimpleFTP class/library does not support TLS/SSL at all.


Use the FTPSClient class from the Apache Commons Net library instead.

See the official example for the FTPClient class and just substitute the FTPClient with the FTPSClient.

FTPSClient ftpClient = new FTPSClient();
ftpClient.connect(host);
ftpClient.login(user, password);

The FTPSClient class defaults to an explicit TLS/SSL (recommended). In a rare case you need an implicit TLS/SSL, use new FTPSClient(true).