Le cryptage est une chose importante qu'il ne faut pas laisser au hasard. Les données échangées avec un serveur sont susceptibles d'être interceptées par n'importe quelle personne (hacker).
Voici le code le plus basique possible d'un serveur SSL (ouverture du port d'écoute) :
package com.labosun.sslserver;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import javax.net.ServerSocketFactory;import javax.net.ssl.SSLServerSocketFactory;public class Main { public static void main(String[] args) { try { int port = 443; ServerSocketFactory ssocketFactory = SSLServerSocketFactory .getDefault(); ServerSocket ssocket = ssocketFactory.createServerSocket(port); // Attente d'un client Socket socket = ssocket.accept(); // Récupération des flux d'entrée de sortie InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); // Lecture d'un entier et retourne l'entier + 1 int read = 0; while ((read = in.read()) != -1) { out.write(read + 1); } // Ferme la connexion in.close(); out.close(); } catch (IOException e) { System.out.println("error : " + e); } }}
Vous devez générer un certificat pour le SSL. Vous pouvez le faire via la commande keytool (fournit dans le JDK). Voici un exemple :
prompt:> keytool -keystore mySrvKeystore -genkey -keyalg RSA -alias mycert
Tapez le mot de passe du Keystore : 123456
Quels sont vos prénom et nom ?
[Unknown] :
Quel est le nom de votre unité organisationnelle ?
[Unknown] :
Quelle est le nom de votre organisation ?
[Unknown] :
Quel est le nom de votre ville de résidence ?
[Unknown] :
Quel est le nom de votre état ou province ?
[Unknown] :
Quel est le code de pays à deux lettres pour cette unité ?
[Unknown] :
Est-ce CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown ?
[non] : oui
Spécifiez le mot de passe de la clé pour <mycert>
(appuyez sur Entrée s'il s'agit du mot de passe du Keystore) :
Bien entendu, ce certificat ne doit être utilisé qu'à des fins de tests !
Vous devez ensuite spécifier des propriétés à la JVM au lancement de votre serveur. Voici les arguments à rajouter :
-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456
mySrvKeystore : nom du fichier keystore généré auparavant
123456 : mot de passe du keystore
Une fois lancé, le serveur écoute sur le port 443 (définit dans le code). La connexion avec le client se fera en SSL de façon transparente pour vous, développeur.
Partager