Application de chat Java sécurisée avec SSL/TLS

Application Java client/serveur avec sockets TCP, SSL/TLS, validation de certificats, stockage MySQL, interface Swing et tests de sécurité avec Wireshark.

Date2024-12-20
CatégorieAcadémique
RôleImplémentation de l’application, configuration SSL/TLS, rapport de tests et documentation technique
StackJava • Sockets TCP • SSLServerSocket / SSLSocket • Swing • MySQL • JDBC • keytool • Wireshark
JavaSSL/TLSMySQLWiresharkCybersécuritéClient/serveur

Points clés

  • Le projet met en œuvre un vrai cas client/serveur sécurisé au lieu de rester au niveau théorique.
  • L’effet de SSL/TLS a été validé par comparaison entre trafic lisible sans chiffrement et trafic illisible une fois le chiffrement activé.
  • Java réseau, certificats, base de données, interface graphique et rapport de test sont réunis dans un même projet.
ContexteProjet de développement sécurisé BUT R&T S3
Fonction principaleChat multi-utilisateur avec comptes, historique et client graphique
Preuve sécuritéComparaison Wireshark avec SSL désactivé/activé et refus de certificat invalide
Preuves disponiblesDocumentation technique, guide utilisateur, rapport de test, code source et Javadoc générée

Ce que j'ai pris en charge

01

Construction et documentation de l’architecture Java client/serveur avec multithreading, communication TCP et interface Swing.

02

Configuration SSL/TLS avec sockets sécurisées Java, keystore, truststore et comportement de validation de certificat.

03

Intégration du stockage MySQL pour les utilisateurs et messages horodatés, avec une commande /history pour récupérer l’historique.

04

Production d’une documentation technique, d’un guide utilisateur et d’un rapport de test couvrant communication en clair, certificat invalide, chiffrement et stockage.

Résultats et preuves

TransportTCP + SSL/TLSLe projet utilise les classes de sockets sécurisées Java pour protéger les échanges client/serveur.
Test certificatCertificat invalide refuséLe rapport de test documente le comportement SSLHandshakeException en cas de certificat non reconnu ou absent.
Preuve traficComparaison WiresharkLes captures réseau montrent la différence entre échange en clair et échange chiffré.
PersistanceMySQL + /historyLes messages sont stockés avec horodatage et récupérables depuis l’interface de chat.

Architecture du chat sécurisé

Schéma montrant les clients Java Swing, les sockets SSL/TLS, le serveur de chat, MySQL, la validation de certificats et les tests Wireshark.
Le projet combine une architecture Java client/serveur avec un workflow de validation sécurité.

Timeline

Étape 1

Construire l’architecture de chat

Créer la base Java client/serveur avec communication TCP, multithreading, gestion utilisateur et interface Swing.

Étape 2

Ajouter sécurité et stockage

Activer SSL/TLS, configurer keystore/truststore, valider les certificats et persister les messages dans MySQL.

Étape 3

Tester et documenter

Comparer captures en clair/chiffrées avec Wireshark, tester les certificats invalides, valider l’historique et produire la documentation finale.

Vue d’ensemble

Ce projet est une application de chat Java sécurisée construite avec une architecture client/serveur. Il combine réseau, sécurité, base de données et interface graphique dans un projet pratique.

L’objectif était de créer une application de messagerie réelle, puis de prouver que les mécanismes de sécurité avaient un effet observable. C’est pour cela que le projet inclut du code, une documentation technique, un guide utilisateur et un rapport de test.

Contexte

Le projet a été développé dans le cadre du BUT R&T S3 autour du développement sécurisé. L’application permet à plusieurs utilisateurs d’échanger des messages via un serveur, pendant que SSL/TLS protège les communications et que MySQL stocke les utilisateurs et messages.

Le point important : la sécurité a été testée, pas seulement décrite.

Ce que j’ai réalisé

Le projet inclut :

  • un serveur de chat Java
  • des clients Java avec interface graphique Swing
  • une communication TCP client/serveur
  • une gestion multithread des clients
  • des sockets sécurisées SSL/TLS
  • une configuration keystore / truststore
  • un stockage MySQL des utilisateurs et messages
  • une récupération de l’historique avec /history
  • une validation Wireshark avec SSL désactivé puis activé

Architecture / approche

L’architecture est simple mais solide pour apprendre :

  1. le client ouvre une connexion vers le serveur
  2. le serveur gère plusieurs clients avec des threads dédiés
  3. SSL/TLS protège les échanges client/serveur
  4. les certificats sont validés avec la logique de truststore
  5. MySQL stocke les utilisateurs et messages horodatés
  6. l’interface client permet de discuter et récupérer l’historique
  7. Wireshark permet de vérifier ce qui est visible sur le réseau

C’est exactement le type de projet qui montre la différence entre “je connais le mot chiffrement” et “j’ai testé ce que le chiffrement change dans une capture réseau”.

Tests de sécurité

Le rapport de test couvre plusieurs scénarios utiles :

Base en clair

SSL/TLS a été désactivé pour observer le comportement de référence. Cela permet de montrer que les messages peuvent apparaître lisibles dans les captures réseau quand la communication n’est pas protégée.

Refus de certificat invalide

La connexion client/serveur a été testée avec un certificat invalide ou absent. Le comportement attendu et obtenu est un refus de connexion avec erreur de handshake SSL.

Validation du trafic chiffré

Avec SSL/TLS activé, les captures Wireshark ne montrent plus de contenu lisible des messages. Cela confirme l’effet concret du transport sécurisé.

Stockage et historique

Le stockage MySQL a été testé en envoyant des messages, en validant leur persistance en base, puis en récupérant les échanges avec la commande /history.

Preuves disponibles

Le projet fourni contient :

  • code source
  • documentation Java générée
  • documentation technique
  • guide utilisateur
  • rapport de test

Avant une publication publique, il faut vérifier et nettoyer les fichiers de configuration pour ne pas exposer de chemins locaux, mots de passe, keystores, truststores ou valeurs propres à l’environnement de test.

Résultats

Ce projet démontre un mélange utile de compétences :

  • développement Java client/serveur
  • programmation avec sockets sécurisées
  • logique de validation des certificats
  • persistance en base de données
  • interface graphique
  • vérification avec Wireshark
  • documentation structurée de tests

Limites et améliorations possibles

L’application est un projet d’apprentissage, pas une plateforme de messagerie de production. Les améliorations principales seraient :

  • meilleure gestion des mots de passe
  • configuration plus propre
  • meilleure gestion d’erreurs dans l’interface
  • dépôt public nettoyé
  • gestion plus robuste du cycle de vie des certificats
  • tests automatisés pour l’authentification et le stockage

Ce que ce projet démontre

Ce projet est fort parce qu’il relie la théorie sécurité à une preuve. Il montre que je peux implémenter une fonctionnalité, la tester, l’observer avec des outils et expliquer techniquement ce que le résultat signifie.

Conçu en France. © 2026 Kopethan ARUDSHELVAN (Kopy).