Ssl - serveur http/s avec certificat

Description

Voici une utilisation des Socket SSL (SSLSocket et SSLServerSocket) pour permettre à 2 applications de communiquer en utilisant le protocole SSL (ici avec un peu de HTTP => donc HTTPS). L'utilisation de SSL en Java est vraiment très simple !!! Pour mettre un peu de difficulté, nous allons créer un certificat permettant d'authentifier le serveur, par conséquent il va vous falloir générer un certificat (bien qu'on ne soit pas obligé de le faire) qui est fournit dans les sources, mais vous pouvez faire le votre.

Une fois lancé à partir du BAT (sous linux changer simplement la synatxe pour l'exportation des variables d'environnement), le serveur HTTP et le serveur HTTPS devraient être démarrés. Vérifier cela dans la console à l'aide des informations du logger. Une fois les serveurs démarré, ouvrez votre navigateur favori (firef... ;-) ) et taper dans la barre d'adresse :
Serveur HTTP : http//127.0.0.1:8080/index.htm
Serveur HTTPS : https://127.0.0.1/index.htm

Normalement, une page internet (page d'accueil de mon site doit apparaître ...)

Remarque : Le serveur HTTP est sur le port 8080 afin d'éviter que cela interfère avec un serveur HTTP tournant déjà sur votre machine. Le serveur HTTPS utilise le port HTTPS qui est par défaut 443.
Attention les serveurs HTTP/S ici ne sont PAS DU TOUT sécurisé !!!! Leur but étant d'être simple.

Pour tout dire, les codes présents ici et bien qu'il n'y ait pas 2000 façons de le faire sont une adaptation des codes disponible sur le site de SUN dans les articles techniques. J'espère que les personnes qui ont besoin d'utiliser ce protocole ou qui redoutaient de l'utiliser vont s'y retrouver très vite, c'est vraiment trivial en Java ... et quand je dis vraiment je pèse bien mes mots !!!!

Créer le certificat du serveur

SSL utilise des certificats pour l'authentification. Les certificats doivent être créés pour les clients et les serveurs qui doivent communiquer avec sécurité en utilisant SSL. JSSE utilise des certificats créés en utilisant l'outil Java keytool. Nous allons générer un certificat RSA pour le serveur HTTPS :

keytool -genkey -keystore serverkeys -keyalg rsa -alias httpsserver

Cette commande génère un certificat référencé par l'alias httpsserver, et sera stocké dans un fichier nommé serverkeys. L'outil keytool va vous demander quelques informations pour générer le certificat (notez bien les mots de passe !) :

Enter keystore password: codessources
What is your first and last name?
[Unknown]: www.javafr.com
What is the name of your organizational unit?
[Unknown]: Training and Consulting
What is the name of your organization?
[Unknown]: MonOrganisation
What is the name of your City or Locality?
[Unknown]: MonBled
What is the name of your State or Province?
[Unknown]: MaRegion
What is the two-letter country code for this unit?
[Unknown]: FR
Is CN=ultra, OU=Training and Consulting,
O=javacourses.com, L=Toronto, ST=Ontario, C=CA correct?
[no]: yes (ou oui pour ceux qui ont la version française ...)

Enter key password for <qusay>
(RETURN if same as keystore password): passhttpskey

Comme vous pouvez le voir, le keytool nous a demandé un mot de passe pour le keystore, ce qui signifie que pour accéder au keystore, le serveur doit connaître le mot de passe. Egalement, l'outil demande un mot de passe pour l'alias. Les mots de passe peuvent être spécifier sur la ligne de commande en utilisant les paramètres -keypass et -storepass.

A noter que l'information concernant votre nom (la première demandée par le keytool) est le nom de la machine donc soit son nom d'hôte soit son adresse IP.

La génération du certificat peut prendre quelques instants en fonction de la machine sur laquelle vous travaillez.

Source / Exemple :


ZIP ZIP ZIP ;-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.