You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Sebb (JIRA)" <ji...@apache.org> on 2011/03/07 22:16:59 UTC
[jira] Reopened: (NET-287) Implicit SSL issue with EFT Server
[ https://issues.apache.org/jira/browse/NET-287?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sebb reopened NET-287:
----------------------
> Implicit SSL issue with EFT Server
> ----------------------------------
>
> Key: NET-287
> URL: https://issues.apache.org/jira/browse/NET-287
> Project: Commons Net
> Issue Type: Bug
> Environment: I am using Windows XP sp3, and am running the demo version of EFT Server. If it matters, I am using Eclipse to write and run the code.
> Reporter: Ryan McV
>
> I am trying to write some code that will download a file from a FTPS Server. When I tested the code in explicit mode using the EFT Server, it works fine. However, when I switch over to implicit mode, I am able to connect and login, but when I try to download a file, It sends back a code 150 saying that it was about to open a data connection, but it never does. Here is the exchange:
> {noformat}
> Attempting to connect to localhost
> 220 GlobalSCAPE EFT Server (v. 6.0) * UNREGISTERED COPY *
> Connected to localhost.
> USER test
> 331 Password required for test.
> PASS 1234
> 230-This is an * UNREGISTERED COPY * of GlobalSCAPE EFT Server.
> 230-
> 230 Login OK. Proceed.
> SYST
> 215 UNIX Type: L8
> Remote System is UNIX Type: L8
> PASV
> 227 Entering Passive Mode (127,0,0,1,18,158).
> RETR test.txt
> 150 Opening ASCII mode data connection for test.txt.{noformat}
> after that, nothing happens and eventually the server times out.
> and here is the code:
> {noformat}import javax.net.ssl.*;
> import java.security.*;
> import java.io.FileNotFoundException;
> import java.io.FileOutputStream;
> import java.io.FileInputStream;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.io.PrintWriter;
> import java.security.NoSuchAlgorithmException;
> import java.security.cert.CertificateException;
> import org.apache.commons.net.PrintCommandListener;
> import org.apache.commons.net.ftp.FTPConnectionClosedException;
> import org.apache.commons.net.ftp.FTPReply;
> import org.apache.commons.net.ftp.FTPSClient;
> public class FTPS_Test2 {
> /**
> * @param args
> */
> public static void main(String[] args)
> {
> String server = "localhost";
> String username = "test";
> String password = "1234";
> String remotefile = "test.txt";
> String localfile = "test.txt";
> String protocl = "SSL";
> String keypass = "jkm127012";
> boolean error = false;
>
> FTPSClient ftps = null;
>
> //Initialization
> KeyStore ks = null;
> try
> {
> ks = KeyStore.getInstance("JKS");
> }
> catch (KeyStoreException e1)
> {
> System.err.println("KeyStore Exception");
> e1.printStackTrace();
> }
>
> FileInputStream fis = null;
> try
> {
> fis = new FileInputStream(".keystore");
> ks.load(fis, keypass.toCharArray());
> fis.close();
> }
> catch (FileNotFoundException e)
> {
> System.err.println("File Not Found");
> e.printStackTrace();
> }
> catch (NoSuchAlgorithmException e)
> {
> System.err.println("No Such Algorithm");
> e.printStackTrace();
> }
> catch (CertificateException e)
> {
> System.err.println("Certificate Exception");
> e.printStackTrace();
> }
> catch (IOException e)
> {
> System.err.println("IOException");
> e.printStackTrace();
> }
>
> TrustManagerFactory tmf = null;
> try
> {
> tmf = TrustManagerFactory.getInstance("PKIX");
> tmf.init(ks);
> }
> catch (NoSuchAlgorithmException e1)
> {
> e1.printStackTrace();
> }
> catch (KeyStoreException e)
> {
> e.printStackTrace();
> }
>
> TrustManager tm[] = tmf.getTrustManagers();
>
> //FTPS Initialization
> try
> {
> ftps = new FTPSClient(protocl, true);
> ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
> }
> catch (NoSuchAlgorithmException e)
> {
> System.err.println("FTPS Initialization Failed");
> e.printStackTrace();
> System.exit(1);
> }
>
> try
> {
> int reply;
>
> System.out.println("Attempting to connect to " + server);
> ftps.setTrustManager(tm[0]);
> ftps.connect(server, 990);
> System.out.println("Connected to " + server + ".");
>
> reply = ftps.getReplyCode();
>
> if(!FTPReply.isPositiveCompletion(reply))
> {
> ftps.disconnect();
> System.err.println("FTP server connection failed");
> System.exit(1);
> }
>
> }
> catch (IOException e)
> {
> System.err.println("IOException");
> e.printStackTrace();
>
> if(ftps.isConnected())
> {
> try
> {
> ftps.disconnect();
> }
> catch (IOException f)
> {
> System.err.println("IOException");
> }
> }
> }
>
> //Main
> try
> {
> ftps.setBufferSize(1000);
>
> if (!ftps.login(username, password))
> {
> ftps.logout();
> error = true;
> }
>
>
> System.out.println("Remote System is " + ftps.getSystemName());
> ftps.enterLocalPassiveMode();
>
> OutputStream output;
> output = new FileOutputStream(localfile);
> ftps.retrieveFile(remotefile, output);
> output.close();
>
> ftps.logout();
> }
> catch (FTPConnectionClosedException e)
> {
> error = true;
> System.err.println("Server Connection closed");
> e.printStackTrace();
> }
> catch (IOException e)
> {
> error = true;
> e.printStackTrace();
> }
> finally
> {
> if(ftps.isConnected())
> {
> try
> {
> ftps.disconnect();
> }
> catch (IOException f)
> {
>
> }
> }
> }
>
> System.exit(error ? 1 : 0);
> }
> } {noformat}
> I have tested the same code on different servers,and it works fine in implicit and explicit modes. However the EFT Server uses a certificate and a key file, and all the other servers just use a cerrtificate file. Is there some special code I have to use in that case? Or is there some setting in the server that I have to set?
> Thanks in advance you for your help.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira