You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-users@mina.apache.org by Fabio Melo <fa...@gmail.com> on 2011/07/28 21:05:36 UTC

Problems with SSL

Hi All,

I'm facing some problem while coding a server server using Apache FTP
server.

I'm using the code bellow to create a FTP server (MyFTPServer), when a run
this piece of code I'm not able to connect through a FTP client such as
Filezilla, WinSCP and My own FTP client into my ftp server.

There is also bellow My FTP Client which represent my FTP Client code for
connect.

Does any body knows what I am doing wrong?

Thanks in advance

 ====================  MyFTPServer=================
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.DataConnection;
import org.apache.ftpserver.ftplet.DefaultFtpReply;
import org.apache.ftpserver.ftplet.DefaultFtplet;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.ftplet.FtpSession;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletResult;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.impl.LocalizedFtpReply;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.ssl.SslConfigurationFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;

public class FTPServerTest extends DefaultFtplet {
public FTPServerTest() {
 try {
FtpServerFactory serverFactory = new FtpServerFactory();
 PropertiesUserManagerFactory userManagerFactory = new
PropertiesUserManagerFactory();
 ListenerFactory factory = new ListenerFactory();
factory.setPort(2221);
 userManagerFactory.setFile(new File("myusers.properties"));
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
 UserManager um = userManagerFactory.createUserManager();
BaseUser user = new BaseUser();
 // define SSL configuration
SslConfigurationFactory ssl = new SslConfigurationFactory();
 ssl.setKeystoreFile(new File("ftpserver.jks"));
ssl.setKeystorePassword("password");
 // set the SSL configuration for the listener
factory.setSslConfiguration(ssl.createSslConfiguration());
 factory.setImplicitSsl(false);
 List<Authority> authorities = new ArrayList<Authority>();
 authorities.add(new WritePermission());
user.setAuthorities(authorities);
 user.setName("myNewUser");
user.setPassword("secret");
 um.save(user);
serverFactory.setUserManager(um);
 serverFactory.addListener("default", factory.createListener());
HashMap<String, Ftplet> ftplets = new HashMap<String, Ftplet>(0);
 ftplets.put("DEFAULT", this);
serverFactory.setFtplets(ftplets);
 // start the server
FtpServer server = serverFactory.createServer();
server.start();

} catch (FtpException e) {
e.printStackTrace();
}
 }

public static void main(String[] args) {
new FTPServerTest();
 }

@Override
public FtpletResult onConnect(FtpSession session) throws FtpException,
 IOException {
System.out.println("onConnect");
return super.onConnect(session);
 }

@Override
public FtpletResult onLogin(FtpSession session, FtpRequest request)
 throws FtpException, IOException {
System.out.println("onLogin");
 return super.onLogin(session, request);
}
 @Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
throws FtpException, IOException {
 String requestedFile = request.getArgument();

        OutputStream in =  new FileOutputStream(requestedFile);


        // open data connection
        DataConnection out = null;
        session.write(new DefaultFtpReply(150, "Getting data connection."));
        try {
            out = session.getDataConnection().openConnection();
        } catch (Exception ex) {
        System.out.println("Exception");
        }
        if (out == null) {
        System.out.println("onUpload - out null");
            return FtpletResult.SKIP;
        }

        // transfer data
        try {


            out.transferFromClient(session,in);
        } finally {
        session.write(new DefaultFtpReply(226, "Transfer Complete."));
            session.getDataConnection().closeDataConnection();
            in.close();
        }
        System.out.println("onUpload -  end");
        return FtpletResult.SKIP;
    }
 @Override
public FtpletResult onUploadEnd(FtpSession session, FtpRequest request){
 System.out.println("fim do up");
return FtpletResult.DEFAULT;
 }
}

========================My FTP
Client================================================

import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;


public class FTPClientTest {

    public static void main(String[] args) {
       try {
            FTPClient ftpClient = new FTPClient();
            //connect and login

            ftpClient.connect("127.0.0.1", 2221);
            ftpClient.login("myNewUser", "secret");

            //file
            FileInputStream fis = null;
            String filename = "README.txt";
            fis = new
FileInputStream("C:\\Users\\fam2\\Desktop\\README.txt");
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

            //
            // Store file to server
            //
            ftpClient.storeFile(filename, fis);
            // System.out.println("Okay");
            fis.close();
            ftpClient.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

Re: Problems with SSL

Posted by David Latorre <dv...@gmail.com>.
Hello,

 What does your log say?



2011/7/28 Fabio Melo <fa...@gmail.com>

> Hi All,
>
> I'm facing some problem while coding a server server using Apache FTP
> server.
>
> I'm using the code bellow to create a FTP server (MyFTPServer), when a run
> this piece of code I'm not able to connect through a FTP client such as
> Filezilla, WinSCP and My own FTP client into my ftp server.
>
> There is also bellow My FTP Client which represent my FTP Client code for
> connect.
>
> Does any body knows what I am doing wrong?
>
> Thanks in advance
>
>  ====================  MyFTPServer=================
> import java.io.File;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.util.ArrayList;
> import java.util.HashMap;
> import java.util.List;
>
> import org.apache.ftpserver.FtpServer;
> import org.apache.ftpserver.FtpServerFactory;
> import org.apache.ftpserver.ftplet.Authority;
> import org.apache.ftpserver.ftplet.DataConnection;
> import org.apache.ftpserver.ftplet.DefaultFtpReply;
> import org.apache.ftpserver.ftplet.DefaultFtplet;
> import org.apache.ftpserver.ftplet.FtpException;
> import org.apache.ftpserver.ftplet.FtpReply;
> import org.apache.ftpserver.ftplet.FtpRequest;
> import org.apache.ftpserver.ftplet.FtpSession;
> import org.apache.ftpserver.ftplet.Ftplet;
> import org.apache.ftpserver.ftplet.FtpletResult;
> import org.apache.ftpserver.ftplet.UserManager;
> import org.apache.ftpserver.impl.LocalizedFtpReply;
> import org.apache.ftpserver.listener.ListenerFactory;
> import org.apache.ftpserver.ssl.SslConfigurationFactory;
> import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
> import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
> import org.apache.ftpserver.usermanager.impl.BaseUser;
> import org.apache.ftpserver.usermanager.impl.WritePermission;
>
> public class FTPServerTest extends DefaultFtplet {
> public FTPServerTest() {
>  try {
> FtpServerFactory serverFactory = new FtpServerFactory();
>  PropertiesUserManagerFactory userManagerFactory = new
> PropertiesUserManagerFactory();
>  ListenerFactory factory = new ListenerFactory();
> factory.setPort(2221);
>  userManagerFactory.setFile(new File("myusers.properties"));
> userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
>  UserManager um = userManagerFactory.createUserManager();
> BaseUser user = new BaseUser();
>  // define SSL configuration
> SslConfigurationFactory ssl = new SslConfigurationFactory();
>  ssl.setKeystoreFile(new File("ftpserver.jks"));
> ssl.setKeystorePassword("password");
>  // set the SSL configuration for the listener
> factory.setSslConfiguration(ssl.createSslConfiguration());
>  factory.setImplicitSsl(false);
>  List<Authority> authorities = new ArrayList<Authority>();
>  authorities.add(new WritePermission());
> user.setAuthorities(authorities);
>  user.setName("myNewUser");
> user.setPassword("secret");
>  um.save(user);
> serverFactory.setUserManager(um);
>  serverFactory.addListener("default", factory.createListener());
> HashMap<String, Ftplet> ftplets = new HashMap<String, Ftplet>(0);
>  ftplets.put("DEFAULT", this);
> serverFactory.setFtplets(ftplets);
>  // start the server
> FtpServer server = serverFactory.createServer();
> server.start();
>
> } catch (FtpException e) {
> e.printStackTrace();
> }
>  }
>
> public static void main(String[] args) {
> new FTPServerTest();
>  }
>
> @Override
> public FtpletResult onConnect(FtpSession session) throws FtpException,
>  IOException {
> System.out.println("onConnect");
> return super.onConnect(session);
>  }
>
> @Override
> public FtpletResult onLogin(FtpSession session, FtpRequest request)
>  throws FtpException, IOException {
> System.out.println("onLogin");
>  return super.onLogin(session, request);
> }
>  @Override
> public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
> throws FtpException, IOException {
>  String requestedFile = request.getArgument();
>
>        OutputStream in =  new FileOutputStream(requestedFile);
>
>
>        // open data connection
>        DataConnection out = null;
>        session.write(new DefaultFtpReply(150, "Getting data connection."));
>        try {
>            out = session.getDataConnection().openConnection();
>        } catch (Exception ex) {
>        System.out.println("Exception");
>        }
>        if (out == null) {
>        System.out.println("onUpload - out null");
>            return FtpletResult.SKIP;
>        }
>
>        // transfer data
>        try {
>
>
>            out.transferFromClient(session,in);
>        } finally {
>        session.write(new DefaultFtpReply(226, "Transfer Complete."));
>            session.getDataConnection().closeDataConnection();
>            in.close();
>        }
>        System.out.println("onUpload -  end");
>        return FtpletResult.SKIP;
>    }
>  @Override
> public FtpletResult onUploadEnd(FtpSession session, FtpRequest request){
>  System.out.println("fim do up");
> return FtpletResult.DEFAULT;
>  }
> }
>
> ========================My FTP
> Client================================================
>
> import java.io.FileInputStream;
> import java.io.IOException;
> import java.net.SocketException;
>
> import org.apache.commons.net.ftp.FTPClient;
> import org.apache.commons.net.ftp.FTPFile;
>
>
> public class FTPClientTest {
>
>    public static void main(String[] args) {
>       try {
>            FTPClient ftpClient = new FTPClient();
>            //connect and login
>
>            ftpClient.connect("127.0.0.1", 2221);
>            ftpClient.login("myNewUser", "secret");
>
>            //file
>            FileInputStream fis = null;
>            String filename = "README.txt";
>            fis = new
> FileInputStream("C:\\Users\\fam2\\Desktop\\README.txt");
>            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
>
>            //
>            // Store file to server
>            //
>            ftpClient.storeFile(filename, fis);
>            // System.out.println("Okay");
>            fis.close();
>            ftpClient.disconnect();
>        } catch (Exception e) {
>            e.printStackTrace();
>        }
>    }
>
>
> }
>