Créer un chat sécurisé avec Netcat

Beginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à établir une communication sécurisée entre deux points terminaux (endpoints) en utilisant Netcat et OpenSSL. Vous allez pratiquer la création de tunnels chiffrés avec des certificats SSL tout en configurant à la fois les composants d'écoute (listener) et de client pour des messages protégés.

Grâce à des exercices pratiques, vous générerez des certificats auto-signés, configurerez un serveur OpenSSL et vous connecterez via Netcat pour vérifier le chiffrement de bout en bout. Cette expérience pratique renforcera votre compréhension des outils de base en cybersécurité pour sécuriser les communications réseau.


Skills Graph

Installer Netcat et OpenSSL

Dans cette étape, vous allez installer deux outils de réseau essentiels : Netcat et OpenSSL. Netcat (souvent appelé nc) est comme un canif suisse numérique pour la communication réseau - il vous permet de lire et d'écrire sur des connexions réseau directement depuis la ligne de commande. OpenSSL est une puissante boîte à outils qui fournit des fonctions de chiffrement, que nous utiliserons pour sécuriser nos messages de chat.

Avant d'installer tout logiciel, il est recommandé de mettre à jour la liste de vos paquets. Cela garantit que vous obtiendrez les dernières versions stables des outils :

sudo apt update

Maintenant, installons Netcat. Cette commande téléchargera et installera le paquet automatiquement :

sudo apt install -y netcat

Ensuite, nous allons installer OpenSSL. Cela fournit les capacités de chiffrement dont nous avons besoin pour une communication sécurisée :

sudo apt install -y openssl

Après l'installation, nous devrions vérifier que les deux outils fonctionnent correctement. Les commandes suivantes afficheront des informations sur les versions - la première ligne affiche la version de Netcat, et la deuxième affiche celle d'OpenSSL :

nc -h | head -n 1
openssl version

Vous devriez voir une sortie similaire à celle-ci, bien que les numéros de version puissent varier :

OpenBSD netcat (Debian patchlevel 1.217-2ubuntu1)
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Si vous voyez des informations de version comme celles-ci, félicitations ! Vous avez installé avec succès les deux outils et êtes prêt à passer à l'étape suivante, où nous les utiliserons pour créer un chat sécurisé.

Configurer un tunnel chiffré

Dans cette étape, vous allez créer un tunnel chiffré en utilisant OpenSSL pour sécuriser votre communication Netcat. Ce tunnel chiffrera toutes les données transmises entre deux points terminaux (endpoints), assurant la confidentialité de vos communications réseau. Le chiffrement est essentiel car il empêche les parties non autorisées de lire vos messages de chat lors de leur transmission sur le réseau.

  1. Tout d'abord, générez un certificat SSL auto-signé et une clé privée dans votre répertoire de projet. Un certificat est comme une carte d'identité numérique qui aide à vérifier l'identité de votre serveur de chat, tandis que la clé privée est utilisée pour chiffrer les données :
cd ~/project
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"

Cette commande crée deux fichiers importants : key.pem (votre clé privée) et cert.pem (votre certificat public). L'option -days 365 rend le certificat valide pendant un an, et -nodes signifie que la clé privée ne sera pas protégée par mot de passe pour plus de simplicité dans ce laboratoire.

  1. Vérifiez que les fichiers de certificat ont été créés avec succès en les listant :
ls -l key.pem cert.pem

Vous devriez voir les deux fichiers d'environ 3 - 4 Ko. Le drapeau -l affiche des informations détaillées, notamment les autorisations et les tailles des fichiers. Si ces fichiers existent, vous avez créé avec succès vos matériaux de chiffrement.

  1. Démarrez le serveur OpenSSL qui gérera les communications chiffrées. Ce serveur agira comme un intermédiaire sécurisé pour votre chat :
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

Le drapeau -quiet réduit les messages de sortie, tandis que -key et -cert spécifient les fichiers que nous venons de créer. Le port 12345 est celui sur lequel le serveur écoutera les connexions entrantes. Gardez ce terminal ouvert et en cours d'exécution - il attend maintenant de communiquer en toute sécurité avec les clients. Dans les étapes suivantes, nous allons nous connecter à ce serveur sécurisé.

Démarrer un écouteur

Dans cette étape, vous allez configurer un écouteur Netcat qui recevra les communications chiffrées via le tunnel OpenSSL que nous avons créé à l'étape précédente. Cet écouteur agira comme l'extrémité de réception de notre canal de communication sécurisé. Imaginez-le comme la mise en place d'une boîte aux lettres sécurisée que seul vous pouvez accéder, où tous les messages sont automatiquement verrouillés avant la livraison.

  1. Tout d'abord, assurez-vous que votre serveur OpenSSL de l'étape 2 est toujours en cours d'exécution dans un terminal. Ce serveur agit comme intermédiaire de chiffrement/déchiffrement entre les participants de notre chat. Sinon, redémarrez-le :
cd ~/project
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

Le paramètre -quiet réduit le bruit de sortie, tandis que -key et -cert spécifient nos informations d'identification de chiffrement. Le port 12345 est celui sur lequel fonctionne notre tunnel sécurisé.

  1. Dans une nouvelle fenêtre de terminal (ou un nouvel onglet), accédez à votre répertoire de projet. Cette séparation facilite la gestion des différents composants de notre système de chat sécurisé :
cd ~/project
  1. Démarrez l'écouteur Netcat qui se connectera à notre tunnel chiffré. Netcat gérera la transmission réelle des messages tandis qu'OpenSSL gérera le chiffrement :
nc localhost 12345

Ici, localhost signifie que nous nous connectons à notre propre machine, et 12345 correspond au port utilisé par notre serveur OpenSSL.

  1. Le terminal semble maintenant figé - c'est normal car Netcat attend les connexions entrantes. Gardez ce terminal ouvert - nous l'utiliserons pour la communication sécurisée à l'étape suivante. Le "figement" signifie que Netcat écoute activement, comme un téléphone attendant un appel.

Remarque : La connexion entre Netcat et OpenSSL est maintenant établie, toutes les communications étant automatiquement chiffrées par OpenSSL avant la transmission. Cela signifie que tout texte que vous tapez sera d'abord crypté par OpenSSL, envoyé sur le réseau, puis décrypté par le destinataire - le rendant illisible pour les éventuels espions.

Se connecter et chater

Dans cette étape, vous allez établir une session de chat sécurisée entre deux terminaux en utilisant le tunnel chiffré que nous avons créé. Cela démontre comment transmettre des messages en toute sécurité sur un réseau non fiable. Le chiffrement garantit que même si quelqu'un intercepte la communication, il ne pourra pas lire vos messages.

  1. Assurez-vous d'avoir trois fenêtres de terminal ouvertes :

    • Terminal 1 : Exécutant le serveur OpenSSL (de l'étape 2) - Celui-ci gère le chiffrement/déchiffrement
    • Terminal 2 : Exécutant l'écouteur Netcat (de l'étape 3) - Celui-ci reçoit et affiche les messages déchiffrés
    • Terminal 3 : Servira à envoyer des messages - Votre interface de saisie
  2. Dans le Terminal 3, connectez-vous au tunnel chiffré en tant que client. Cette commande demande à OpenSSL de se connecter à notre tunnel sécurisé sur le port 12345 :

cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Tapez un message de test dans le Terminal 3 et appuyez sur Entrée. Ce message sera automatiquement chiffré avant la transmission :
Hello secure world!
  1. Passez au Terminal 2 (l'écouteur) - vous devriez voir votre message chiffré affiché en texte brut. Cela montre que le message a été correctement déchiffré à l'autre extrémité.

  2. Maintenant, tapez une réponse dans le Terminal 2 et appuyez sur Entrée. Le message sera chiffré avant d'être envoyé en retour :

This is a secure reply!
  1. La réponse devrait apparaître dans le Terminal 3. Vous avez maintenant un canal de chat sécurisé bidirectionnel où les deux parties peuvent envoyer et recevoir des messages chiffrés.

  2. Pour quitter le chat, appuyez sur Ctrl+C dans tous les terminaux une fois terminé. Cela ferme correctement toutes les connexions et arrête les processus de chiffrement.

Vérifier le chiffrement

Dans cette étape finale, nous allons vérifier que notre chiffrement SSL/TLS fonctionne correctement en examinant le trafic réseau brut. Cette démonstration pratique vous montrera exactement comment le chiffrement protège vos données contre la lecture par des parties non autorisées. Lorsque nous utilisons OpenSSL avec Netcat, toute communication est transformée en texte chiffré illisible pendant la transmission.

  1. Tout d'abord, nous avons besoin d'un outil pour inspecter le trafic réseau. Installez tcpdump, qui est un puissant analyseur de paquets en ligne de commande :
sudo apt install -y tcpdump
  1. Ouvrez une nouvelle fenêtre de terminal pour surveiller le trafic. Nous allons spécifiquement observer l'interface de bouclage (lo) qui gère le trafic réseau local sur votre propre machine. Le paramètre -X affiche à la fois la sortie hexadécimale et ASCII, tandis que -n empêche la résolution DNS pour une sortie plus claire :
sudo tcpdump -i lo -X -n port 12345
  1. Dans un autre terminal, redémarrons notre session de chat chiffrée exactement comme nous l'avons fait précédemment. Cette commande établit une connexion SSL à notre serveur de chat exécuté sur le port 12345 :
cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Maintenant, envoyons un message de test via ce canal chiffré. Tapez ce que vous voulez - nous utiliserons cet exemple simple :
This message should be encrypted
  1. Regardez la fenêtre de tcpdump. Au lieu de voir votre message lisible, vous observerez des données brouillées constituées de valeurs hexadécimales et de caractères ASCII aléatoires. C'est votre message après chiffrement - complètement illisible sans la clé de déchiffrement appropriée.

  2. Pour apprécier la différence, comparons cela avec le trafic non chiffré :

    • Tout d'abord, arrêtez tous les processus en cours d'exécution en appuyant sur Ctrl+C dans toutes les fenêtres de terminal.
    • Démarrez un serveur Netcat classique sans chiffrement : nc -l 12345
    • Connectez-vous à celui-ci depuis un autre terminal : nc localhost 12345
    • Envoyez exactement le même message de test.
    • Observez comment tcpdump montre maintenant clairement votre message en texte brut dans la sortie.

Cette comparaison démontre clairement pourquoi le chiffrement est important - sans lui, quiconque surveille le réseau peut lire directement vos messages.

Résumé

Dans ce laboratoire (lab), vous avez appris à créer un canal de chat sécurisé en utilisant Netcat et OpenSSL. Le processus a consisté à installer les outils nécessaires, à générer des certificats SSL et à établir une communication chiffrée via un tunnel OpenSSL.

Vous avez pratiqué la configuration à la fois du serveur et du client tout en vérifiant l'efficacité du chiffrement. Cette combinaison des fonctionnalités réseau de Netcat et des fonctionnalités de sécurité d'OpenSSL démontre comment protéger la transmission de données contre les écoutes potentielles.