Matthew Pigram
Matthew Pigram

Reputation: 1430

Java SSL sockets not working

I am using TCP/IP sockets to create a client and server applicaton. Originally I was using regular sockets but now I have decided to use SSL for my connection. I have created a keystore and have tried running my application but it has yet to be successful.

Here is my code for the server

public class ArFileServer {

public static void main(String[] args) 
{
    boolean listening = true;
    ServerSocketFactory serversocketfactory;
    ServerSocket serverSocket;  

    try
    {
        //serverSocket = new ServerSocket(4445);

        serversocketfactory = SSLServerSocketFactory.getDefault();
        serverSocket = serversocketfactory.createServerSocket(4445);

        String keystore = System.getProperty("javax.net.ssl.trustStore");
        System.out.println(keystore);

        // infinite loop to continually listen for connection requests made by clients
        while (listening)
        {
            new ClientConnection(serverSocket.accept()).start();

            if (serverSocket != null)
            {
                System.out.println("Connection to client established");
            }
        }

        serverSocket.close();
    }
    catch (IOException e)
    {
        System.out.println("Error could not create socket connection to port, check that port is not busy");
    }
}
}

and here is the client code:

public class ClientSocket 
{
SocketFactory socketfactory = null;
Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;


// establish a connection to All Care's server application through socket 4444 (adjust localhost to reflect the IP address that the server
// is being run from)
public ClientSocket()
{
    try
    {
        //clientSocket = new Socket("localhost", 4445);

        //SocketFactory socketfactory = SSLSocketFactory.getDefault();
        clientSocket = socketfactory.createSocket("192.168.1.8", 4445);
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        String truststore = System.getProperty("javax.net.ssl.trustStore");
        System.out.println(truststore);
    }
    catch (IOException e)
    {
        System.out.println("Could not connect to All Care Server Application : " + e.getMessage());
    }
}
}

I am also using these runtime arguments:

-Djavax.net.ssl.keyStore=C:\Users\Chris\Documents\NetBeansProjects\ArFile\keystore.jks -Djavax.net.ssl.keyStorePassword=password

When I try to print out the truststore it always returns null, what am I doing wrong?

Upvotes: 2

Views: 1761

Answers (2)

user207421
user207421

Reputation: 310893

When I try to print out the truststore it always returns null

Because you never set it. All you are doing is printing out the value of a system property. If you didn't set it, it is null.

what am I doing wrong?

Nothing yet, except printing out meaningless information. But much of your code doesn't make sense:

if (serverSocket != null)
{
    System.out.println("Connection to client established");
}

serverSocket being non-null (a) is inevitable at this point, and (b) doesn't have anything do with the client socket being established, which is inevitable at this point.

catch (IOException e)
{
    System.out.println("Error could not create socket connection to port, check that port is not busy");
}

An IOException at this point could mean many things, but the one thing it doesn't mean is 'cannot create socket connection to port'. It is the client that does the connecting: the server accepts connections. When you catch an exception, always print its message, don't just make up your own.

Upvotes: 1

SKi
SKi

Reputation: 8466

You need to define both trustStore and keyStore in runtime arguments:

-Djavax.net.ssl.keyStore=xxx.ks 
-Djavax.net.ssl.keyStorePassword=yyy 
-Djavax.net.ssl.trustStore=xxx.ks 
-Djavax.net.ssl.trustStorePassword=yyy 

Both can be same file.

trustStore contains public keys of others. keyStore contains own keys and certificates.

Upvotes: 0

Related Questions