diff --git a/src/main/java/fr/istic/chiffrement/Serveur.java b/src/main/java/fr/istic/chiffrement/Serveur.java index e6000be..13210de 100644 --- a/src/main/java/fr/istic/chiffrement/Serveur.java +++ b/src/main/java/fr/istic/chiffrement/Serveur.java @@ -1,6 +1,21 @@ package fr.istic.chiffrement; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.net.ServerSocket; +import java.security.KeyStore; +import java.util.Arrays; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocket; public class Serveur { static int PORT = 9999; @@ -17,7 +32,7 @@ public class Serveur { public static ServerSocket creerSocketClassique() throws Exception { // TODO : retourner une socket classique qui écoute sur le port 9999 - return null; + return new ServerSocket(9999); } /** @@ -34,12 +49,46 @@ public class Serveur { // + mot de passe store et clef : variable PASSWORD plus haut. // + keystore, serveurstore.keys - return null; // Retourner la socket correctement configurée + SSLContext context = SSLContext.getInstance("TLS"); + KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); + KeyStore ks = KeyStore.getInstance("JKS"); + + ks.load(new FileInputStream("monstore.keys"), PASSWORD); + kmf.init(ks, PASSWORD); + context.init(kmf.getKeyManagers(), null, null); + Arrays.fill(PASSWORD, '0'); + SSLServerSocketFactory factory = context.getServerSocketFactory(); + SSLServerSocket server = (SSLServerSocket) factory.createServerSocket(9999); + server.setEnabledCipherSuites(new String[] { "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" }); + + + + return server; // Retourner la socket correctement configurée } public static void readPingSendPong(ServerSocket server) throws Exception { - // accepter une connexion - // lire PING - // écrire PONG vers le client + boolean active = true; + while (active) { + // accepter une connexion + SSLSocket sslsocket = (SSLSocket) server.accept(); + InputStream in = sslsocket.getInputStream(); + OutputStream out = sslsocket.getOutputStream(); + + // lire PING + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + String message = reader.readLine(); + int id = -1; + if(message.startsWith("ping")){ + String num = message.replaceFirst("^" + "ping", ""); + try { + id = Integer.parseInt(num); + } catch (NumberFormatException e) { + } + } + + // écrire PONG vers le client + out.write(("pong"+id).getBytes()); + in.close();out.close();sslsocket.close(); + } } } \ No newline at end of file