Total members 10261 | Gratitudes |It is currently Tue May 22, 2012 5:40 pm Login / Join Codemiles


All times are UTC [ DST ]




Post new topic Reply to topic  Quick reply  [ 6 posts ] 
Author Question
 Question subject: apply SSL on Sockets
PostPosted: Fri Jun 08, 2007 12:51 pm 
Offline
Newbie
User avatar

Joined: Thu Jun 07, 2007 5:20 pm
Posts: 18
Has thanked: 0 time
Have thanks: 0 time

this is simple example to follow SSL connection by Sockets in Java ...

Server :

Code:


/*#########################################################################
* This example ONLY for Development Enviroment and testing purposes
* not for Production Enviroment this is simple example ,
* i don't want to import and export certificate or send most specific arguments
* because iam in the same PC and THERE IS NO Application Server (e.g.ColdFusion,GlassFish )
* iam care only about how to apply SSL though JAVA , so its just SIMPLE EXAMPLE !!
*
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* JAVA in JDK1.4 realease JAVA Secure Socket Extension(JSSE)
* as default package installed when you install JKD from java.sun.com
* this example running on JDK1.6 (mustang) ,
* and supposed to run with 1.4 & 1.5 without problems
*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*  keytool (part of JSSE)is utility tool for creating keys management
* from this tool you can create self-signed certificate
* and pulic/private keys , for SSL or TLS
*
*
*prerequests :
* any JAVA IDE with JDK1.4 or heigher
* little knowledge regarding Sockets in JAVA
*
*Steps :
*
*(1)invoke this statement from command-line :
*  keytool -genkey -keystore CEN448
*
* if you face problem such is not recognize internal ...
* so your classpath from the ENVIROMENT VARIABLE window didn't configured well
*
*(2) after execute command it will prompt you to enter password at least 6 chars ,
* enter CEN448 note its case-sensitive and then write anything for first six questions
* then write yes at seven and press enter at eight question .
*
*(3) after perform two steps keytool create self-signed file in your home directory such as :
* C:\Documents and Settings\quick with the name CEN448 , copy it and paste it
* at your application directory such as : C:\Documents and Settings\quick\Desktop\UMLTutorial\EDU
*
*
* -genkey , to generate new key pair (public and private)
* -keystore to specify the name of the persistent keystore file  that contain keys   
*
* the default key pair generation algorithm is Digital Signature Algorithm (DSA)
* you can specify other algorithem  by invoke -keyalg algorithemName beside command
*
* the default valid days for self-signed is 90 days
*
* Password its only for protect your file , it doesn't do anything related to the en/de.cryption
* you must specify the same password for the KeyStore you want to access in your program
* %%%%%%%%% how to Run %%%%%%%%%%%%
* first run Server.java then run Client.java and wrote
* messages from client side to the server , write bye bye to quit
*
***************** Lines Explaination ***********************
* (1)  in the keyStore system property you save the sensitive data(private key)
*       with the certificate for the identity purpose(as Server ).
*
* (2)  protect your file with password by assign the KeyStorePassword property
*   
* (3) create SSLServerSocketFactory with the default SSL server socket
*     SSL server socket its same as ServerSocket but secure .
*     SSLSocketFactory if SSL not configured well in JVM it will throw an Exception
*
* (4) create Secure ServerSocket and bind it to port 2345 .
*   
* (5) create secure socket accepted from client
*
* Reference :
*  http://java.sun.com/products/jsse/
*  https://www6.software.ibm.com/developerworks/education/j-jsse/index.html
*  http://www.javaworld.com/javaworld/jw-05-2001/jw-0511-howto.html
*
*/

import javax.net.ssl.*;
import java.io.*;

public class Server {
    public static void main(String[]ssl) {
        try {
               
            System.setProperty("javax.net.ssl.keyStore","CEN448");//1
            System.setProperty("javax.net.ssl.keyStorePassword","CEN448");//2
            //System.setProperty("javax.net.debug","ssl"); //for debug purposes uncommit this statement   
            SSLServerSocketFactory ssf =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();//3
            SSLServerSocket sss = (SSLServerSocket) ssf.createServerSocket(2345);//4
            SSLSocket ss = (SSLSocket) sss.accept();//5
            System.out.println("Successfully connected to the  SecureServer ");
            BufferedReader br = new BufferedReader(new InputStreamReader(ss.getInputStream()));
            String out = null;
            while ((out = br.readLine())!= null&&(!out.equals("bye bye"))) {
               System.out.println(out);
              }
              System.out.println("End Session ");
        } catch (Exception e) {
             System.err.println("Exception while create SSLServerSocket");
        }
     
    }
}
   



Client :

Code:



/*
*^^^^^^^^^^^^^^Lines Explaination^^^^^^^^^^^^^^
* (1) assign the System Property trustStore to use our self-signed certificate
*     there is no sensitive data here only public key  (as Client)
*
* (2) inform the data stream to go to the serverSocket
*
*/
import javax.net.ssl.*;
import java.io.*;

public class Client {
    public static void main(String[]ssl) {
        try {
       
            System.setProperty("javax.net.ssl.trustStore","CEN448");//1
            System.setProperty("javax.net.ssl.trustStorePassword","CEN448");
            SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket ss = (SSLSocket) ssf.createSocket("127.0.0.1",2345);
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ss.getOutputStream()));
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
           

            String out;
            while ((out = br.readLine())!= null) {
                bw.write(out);
                bw.newLine();
                bw.flush(); //2
            }
        } catch (Exception e) {
            System.err.println("Exception while connect to Server ");
        }
    }
}



TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: apply SSL on Sockets
PostPosted: Fri Jun 08, 2007 1:11 pm 
Offline
Mastermind
User avatar

Joined: Tue Mar 27, 2007 10:55 pm
Posts: 2279
Location: Earth
Has thanked: 39 time
Have thanks: 61 time
Hi Xline ,
very good code , Security sockets :D

I tried to run the classes
the client works fine , but the problem is in the Server side , i made small changes in Server Class which i removed comments and " " tags to Strings in print functions :P here it is the class , it compile with no error but when i run an exception happened " (The system cannot find the file specified)"
Code:
import javax.net.ssl.*;
import java.io.*;

public class Server {
    public static void main(String[]ssl) {
        try {
               
            System.setProperty("javax.net.ssl.keyStore","CEN448");
       System.setProperty("javax.net.ssl.keyStorePassword","CEN448");
        System.setProperty("javax.net.debug","ssl");
            SSLServerSocketFactory ssf =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            SSLServerSocket sss = (SSLServerSocket) ssf.createServerSocket(2345);
            SSLSocket ss = (SSLSocket) sss.accept();
            System.out.println("Successfully connected to the  SecureServer" );
            BufferedReader br = new BufferedReader(new InputStreamReader(ss.getInputStream()));
            String out = null;
            while ((out = br.readLine())!= null&&(!out.equals("bye bye"))) {
               System.out.println("out");
              }
              System.out.println("End Session ");
        } catch (Exception e) {
             System.err.println("Exception while create SSLServerSocket");
        }
     
    }
}


I didn't follow the steps
Quote:
*Steps :
*
*(1)invoke this statement from command-line :
* keytool -genkey -keystore CEN448
*
* if you face problem such is not recognize internal ...
* so your classpath from the ENVIROMENT VARIABLE window didn't configured well
*
*(2) after execute command it will prompt you to enter password at least 6 chars ,
* enter CEN448 note its case-sensitive and then write anything for first six questions
* then write yes at seven and press enter at eight question .
*
*(3) after perform two steps keytool create self-signed file in your home directory such as :
* C:\Documents and Settings\quick with the name CEN448 , copy it and paste it
* at your application directory such as : C:\Documents and Settings\quick\Desktop\UMLTutorial\EDU
*
*
* -genkey , to generate new key pair (public and private)
* -keystore to specify the name of the persistent keystore file that contain keys
*
* the default key pair generation algorithm is Digital Signature Algorithm (DSA)
* you can specify other algorithem by invoke -keyalg algorithemName beside command
*
* the default valid days for self-signed is 90 days
*
* Password its only for protect your file , it doesn't do anything related to the en/de.cryption
* you must specify the same password for the KeyStore you want to access in your program
* %%%%%%%%% how to Run %%%%%%%%%%%%
* first run Server.java then run Client.java and wrote
* messages from client side to the server , write bye bye to quit
*

_________________
Currenlty programming with : java , html , php , and javascript . (OCJP-6 certified )


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: apply SSL on Sockets
PostPosted: Fri Jun 08, 2007 4:48 pm 
Offline
Newbie
User avatar

Joined: Thu Jun 07, 2007 5:20 pm
Posts: 18
Has thanked: 0 time
Have thanks: 0 time
smi_333 , why you put String "out" between qoutation !

just follow the steps ,
about exception do you copy the file(certificate) CEN448 generated by command line to your Project directory ?


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: apply SSL on Sockets
PostPosted: Fri Jun 08, 2007 4:57 pm 
Offline
Newbie
User avatar

Joined: Thu Jun 07, 2007 5:20 pm
Posts: 18
Has thanked: 0 time
Have thanks: 0 time
Casper
did you follow the steps ?
did you generate CEN448 file ?

if you follow the steps and still the problem be sure that the jsse package installed with your JDK(1.4 and above) ,

go to bin directory like : C:\Program Files\Java\jdk1.6.0\bin and look at keytool.exe


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: apply SSL on Sockets
PostPosted: Sat Jun 09, 2007 7:00 pm 
Offline
Mastermind
User avatar

Joined: Tue Mar 27, 2007 10:55 pm
Posts: 2279
Location: Earth
Has thanked: 39 time
Have thanks: 61 time
How to generate CEN448 file , is it a text file

_________________
Currenlty programming with : java , html , php , and javascript . (OCJP-6 certified )


TOP
 Profile Send private message  
Reply with quote  
 Question subject: Re: apply SSL on Sockets
PostPosted: Sun Jun 10, 2007 11:14 am 
Offline
Newbie
User avatar

Joined: Thu Jun 07, 2007 5:20 pm
Posts: 18
Has thanked: 0 time
Have thanks: 0 time
after invoke the command , CEN448 encrypted file will created


TOP
 Profile Send private message  
Reply with quote  
Post new topic Reply to topic Quick reply  [ 6 posts ] 
Quick reply


  

 Similar topics
 apply laplacian filter to image
 apply robert filter to image
 apply prewitt filter to image
 apply sobel filter to image
 apply mean filter to image
 What are Datagrams and Sockets?

All times are UTC [ DST ]


Users browsing similar posts

Users browsing this forum: No registered users and 3 guests



Jump to:  
Previous Question | Next Question 




Home
General Talks
Finished Projects
Code Library
Games
Tutorials

Java
C/C++
C-sharp
php
Script
JSP/Servlets
Ajax
ASP/ASP.net
Google SEO
Database
Communications
Phpbb3 styles
Photoshop tutorials
Flash tutorials
Find a job






Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
All copyrights reserved to codemiles.com 2007-2011
mileX v1.0 designed by codemiles team