jimmysnn_17 Δημοσ. 16 Δεκεμβρίου 2010 Δημοσ. 16 Δεκεμβρίου 2010 Καλησπέρα! ¨Προσπαθώ να φτιάξω 2 απλά προγράμματα server-client που επικοινωνούν με την ασφάλεια του ssl. Τον server και τον client τους τρέχω σε 2 υπολογιστές ενός υποδικτύου,ο ένας είναι συνδεδεμένος με usb και ο άλλος με ethernet στο router. Τα πιστοποιτικά τα έχω φτιάξει με openssl και είναι ως εξής: μία αρχή πιστοποίησης (myca) που έχει ένα αυτο-υπογεγραμμένο πιστοποιητικό και τα άλλα δύο πιστοποιτικά τα έχει υπογράψει αυτή η ca. Την μετατροπή των πιστοποιητικών την έκανα με το keytool (πρόσθεσα και το κλειδί και το πιστοποιτικό στο κάθε jks). Το πρόβλημα μου είναι ότι ενώ μπορώ να συνδεθώ κανονικά και να στείλω μύνημα απο το client στον server ,τα μυνήματα αυτά δεν είναι SSL αλλά TCP! Ο κώδικας του server μου είναι ο παρακάτω: > import java.io.*; import java.net.*; import java.security.*; import java.util.*; import javax.net.ssl.*; public class sslserver { ObjectOutputStream out; ObjectInputStream in; String message; sslserver(){} void run() throws Exception { char[] passphrase = "123456".toCharArray(); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream("/home/jimmysnn/JavaApplication4/src/keystore.jks"), passphrase); KeyStore serverkeystore = KeyStore.getInstance("JKS"); serverkeystore.load(new FileInputStream("/home/jimmysnn/JavaApplication4/src/server.jks"), passphrase); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(keystore, passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(serverkeystore); SSLContext context = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); KeyManager[] keyManagers = kmf.getKeyManagers(); context.init(keyManagers, trustManagers, null); //1. creating a server socket SSLServerSocketFactory ssf = context.getServerSocketFactory(); ServerSocket ss = ssf.createServerSocket(2004); //2. Wait for connection System.out.println("Waiting for connection"); Socket s = ss.accept(); System.out.println("Connection received from " + s.getInetAddress().getHostName()); //3. get Input and Output streams out = new ObjectOutputStream(s.getOutputStream()); out.flush(); in = new ObjectInputStream(s.getInputStream()); sendMessage("Connection successful"); //4. The two parts communicate via the input and output streams Scanner input = new Scanner( System.in ); do{ message = (String)in.readObject(); System.out.println("client>" + message); if (message.equals("bye")) sendMessage("bye"); }while(!message.equals("bye")); //4: Closing connection in.close(); out.close(); ss.close(); } void sendMessage(String msg) throws Exception { out.writeObject(msg); out.flush(); System.out.println("server>" + msg); } public static void main(String args[]) throws Exception { Server server = new Server(); while(true){ server.run(); } } } Ο κώδικας για το client είναι : > import java.io.*; import java.net.*; import java.util.*; import java.security.*; import javax.net.ssl.*; public class sslclient { ObjectOutputStream out; ObjectInputStream in; String message; sslclient(){} void run() throws Exception { char[] passphrase = "123456".toCharArray(); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream("/home/ge0rge/Javaaskhsh4/src/myca.jks"), passphrase); KeyStore keystoreclient = KeyStore.getInstance("JKS"); keystoreclient.load(new FileInputStream("/home/ge0rge/Javaaskhsh4/src/client.jks"), passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(keystore); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(keystoreclient, passphrase); SSLContext context = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); KeyManager[] keyManagers = kmf.getKeyManagers(); context.init( keyManagers, trustManagers, null); SSLSocketFactory sf = context.getSocketFactory(); Socket s = sf.createSocket("192.168.1.5", 443); System.out.println("Connected to localhost in port 2004"); //2. get Input and Output streams out = new ObjectOutputStream(s.getOutputStream()); out.flush(); in = new ObjectInputStream(s.getInputStream()); //3: Communicating with the server Scanner input = new Scanner( System.in ); message = (String)in.readObject(); System.out.println("server>" + message); //message = input.nextLine(); sendMessage("Hi my server"); do{ message = input.nextLine(); sendMessage(message); if(message.equals("bye")){ message = (String)in.readObject(); System.out.println("server>" + message); } }while(!message.equals("bye")); in.close(); out.close(); s.close(); } void sendMessage(String msg) throws Exception { out.writeObject(msg); out.flush(); System.out.println("client>" + msg); } public static void main(String args[]) throws Exception { Client client = new Client(); client.run(); } } Οποιοδήποτε tip είναι καλοδεχούμενο Ευχαριστώ πολύ!
MitsakosGR Δημοσ. 16 Δεκεμβρίου 2010 Δημοσ. 16 Δεκεμβρίου 2010 Καλησπέρα! ¨Προσπαθώ να φτιάξω 2 απλά προγράμματα server-client που επικοινωνούν με την ασφάλεια του ssl. Τον server και τον client τους τρέχω σε 2 υπολογιστές ενός υποδικτύου,ο ένας είναι συνδεδεμένος με usb και ο άλλος με ethernet στο router. Τα πιστοποιτικά τα έχω φτιάξει με openssl και είναι ως εξής: μία αρχή πιστοποίησης (myca) που έχει ένα αυτο-υπογεγραμμένο πιστοποιητικό και τα άλλα δύο πιστοποιτικά τα έχει υπογράψει αυτή η ca. Την μετατροπή των πιστοποιητικών την έκανα με το keytool (πρόσθεσα και το κλειδί και το πιστοποιτικό στο κάθε jks). Το πρόβλημα μου είναι ότι ενώ μπορώ να συνδεθώ κανονικά και να στείλω μύνημα απο το client στον Κάτι λείπει από το κείμενό σου! Έχει μείνει μισό...
jimmysnn_17 Δημοσ. 17 Δεκεμβρίου 2010 Μέλος Δημοσ. 17 Δεκεμβρίου 2010 Κάτι λείπει από το κείμενό σου! Έχει μείνει μισό... Ευχαριστώ φίλε!Το έφτιαξα
ntaryl Δημοσ. 17 Δεκεμβρίου 2010 Δημοσ. 17 Δεκεμβρίου 2010 Καλησπερα Αμα θελεις ποσταρισε την απαντηση ισως καποιος αντιμετωπισει κατι παρομοιο . Ευχαριστω
jimmysnn_17 Δημοσ. 18 Δεκεμβρίου 2010 Μέλος Δημοσ. 18 Δεκεμβρίου 2010 Ναι φίλε το έχω υπόψιν μου. Θα γίνει μέσα στις επόμενες μέρες...!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.