http://tuxanantes.free.fr/
Objectif de cet article
Présenter et décrire la mise en oeuvre d'une connexion ssh entre :
entre 2 machines Linux
entre une machine sous Windows ( avec putty ) et une machine Linux
Pour éviter qu'un message ne soit lu par un tiers lorsqu'il transite sur le réseau ou sur le Web, il faut le coder (chiffrer) au moyen d'une clé de chiffrement. Le correspondant devra le décoder pour le rendre compréhensible.
Deux types de chiffrement :
1. à clé unique privée ou à algorithme symétrique
La clé de chiffrement est identique à la clé de déchiffrement, et chaque interlocuteur la connaît et doit la tenir secrète.
Ce principe entraîne deux inconvénients :
comment s'échanger cette clé secrète en toute sécurité ?
chacun doit avoir une clé secrète échangée avec chacun de ses interlocuteurs (un nombre colossal)
2. à clé publique et privée ou à algorithme asymétrique, c'est ce principe que nous allons décrire dans cet article
L'algorithme est dit asymétrique, car il met en jeux deux clés différentes.
Le destinataire d'un message possède donc deux clés :
sa clé dite publique dont va prendre connaissance l'émetteur et qu'il va utiliser pour coder son texte. Cette clé peut, par exemple être publiée dans un annuaire LDAP ou X500 (Active Directory sous Windows 2000).
sa clé dite secrète qui est différente de la première clé et, seule, qui permettra au destinataire de lire le texte reçu. Elle peut, par exemple être conservée sur une carte à puce,
La connaissance d'une clé ne permet pas de déduire la seconde.
La clé de décryptage étant secrète, unique et conservée par celui qui lit le message, personne d'autre n'en a connaissance.
Dans la pratique, pour envoyer un message à un correspondant, il suffit de se procurer sa clé publique et de coder le message avec. Il y a donc réduction du nombre de clés nécessaires.
Les algorithmes connus sont RSA et DSA
L'inconvénient de l'algorithme asymétrique réside dans le temps de déchiffrement particulièrement long (100 à 1000 fois plus qu'avec un algorithme symétrique).
Pour accélérer les traitements, les systèmes combinent généralement les deux principes :
création aléatoire d'une clé temporaire symétrique par l'expéditeur,
envoi de cette clé secrète par le système très sûr de la clé publique,
envoi du message codé à l'aide de la clé symétrique temporaire,
suppression de la clé symétrique temporaire.
Les algorithmes symétriques connus sont DES et AES.
Cet algorithme permet à deux interlocuteurs de constituer entre eux une clé secrète au moyen de deux informations qu’ils s’échangent. Même si les deux informations sont interceptées, il est très difficile de reconstituer la clé de cryptage. Cette procédure qui permet l'échange de clés est utilisée pour initier des communications protégées.
L'évolution de la puissance des ordinateurs des délinquants allant de paire avec celle des utilisateurs, les algorithmes doivent devenir de plus en plus complexes et les clés de plus en plus longues. On estime actuellement qu'il faut pour être en sécurité :
pour une clé symétrique : 128 bits minimum,
pour des clés asymétriques : 1024 bits.
La législation française n'autorisait avant 1999 que des chiffrements à clé jusqu'à 40 bits, elle autorise 128 bits actuellement.
La configuration décrite ici se veut le minimum à mettre en oeuvre pour assurer cette connexion, pour une configuration plus sécurisée, il sera nécessaire de faire des choix plus spécifiques
On plante le decor :
Deux machines sous Linux en l'occurence sous Fedora 6, sur lesquelles sont installés les paquets suivants :
[root@fedora1 ~]# rpm -qa| grep ssl
openssl-0.9.8b-8
[root@fedora1 ~]# rpm -qa| grep ssh
openssh-clients-4.3p2-10
openssh-askpass-4.3p2-10
openssh-4.3p2-10
openssh-server-4.3p2-10
Je veux que le compte « root » de la machine fedora1 puisse ouvrir une session en utilisant le compte « root » de la machine fedora3 sans avoir à renseigner de mot de passe et biensur en cryptant les données echangées entre les 2 machines ( c'est la vocation de ssh ).
root sur fedora1 va générer un couple de clé privée/public.
La clé privée sera conservée sur fedora1
La clé publique sera diffusée sur toutes les machines sur lesquelles root de fedora1 voudra se connecter.
Génération du couple de clés :
[root@fedora1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
41:a7:b0:25:7d:fa:2b:d0:55:86:7f:01:8a:70:15:60 root@fedora1.linux.tux
[root@fedora1 .ssh]# ll
total 40
-rw------- 1 root root 1675 mar 25 16:01 id_rsa
-rw-r--r-- 1 root root 404 mar 25 16:01 id_rsa.pub
id_rsa -----> contient la clé privée ( a conserver secrétement )
id_rsa.pub -----> contient la clé publique ( a diffuser sur toutes les machines sur lesquelles root de fedora1 voudra se connecter )
Diffusion de la clé publique de root de fedora1 pour se connecter sur le compte root de fedora3 :
Par le moyen de son choix ( email , repertoire partagé, ftp , copier – coller, ...) on transfère la clé publique de root / fedora1 sur la machine fedora3.
Cette clé publique doit être insérer dans le fichier /root/.ssh/authorized_keys ( eventuellement à la suite de clés déjà existantes)
Dans mon exemple , je transfert cette clé publique, par copier-coller entre deux fenêtres ouvertes avec un émulateur sous Windows : putty
J'ai ouvert une session sur chaque machine:
sur la machine fedora1 :
[root@fedora1 .ssh]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzg69sIkWbC3lsBozUyPq9bwpxxo/G1Rb0ESqafFMqnrsJBpwhq5u7X4JDGwkV0QLArZgn8HHHz2KLRyutkgMZFlhH0VX0tcFyP/5PFiZDyF2zYOTi1tki7M2OMP3uW+bqY1zxQxvYhCQ01mPk1P7Gg6mXbBqDKbYd7d3kWspWE2piPKIme1S92wh7Mdbt7XhNBaJHZEHWw/ofKwp94Mv2E9vCzN/dIIkbR9OqxpcUXPzOMDyMsMqRm3bMXerQfFxlAhMJi1Oy1okUFJ0RnRYW9is62BklHrjkIlfunrDPgwo6SYMhFpNU2aQ3/OThG0lSmMGD+IzjiOsGdaf3B71KQ== root@fedora1.linux.tux
sur fedora3 :
[root@fedora3 .ssh]# vi /root/.ssh/authorized_keys
et je suis en mode insertion
Mise en surbrillance de la clé publique
et copier -coller dans le fichier /root/.ssh/authorized_keys ouvert avec l'editeur vi dans la fenêtre putty ouverte sur fedora3.
Resultat :
[root@fedora3 .ssh]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzg69sIkWbC3lsBozUyPq9bwpxxo/G1Rb0ESqafFMqnrsJBpw
hq5u7X4JDGwkV0QLArZgn8HHHz2KLRyutkgMZFlhH0VX0tcFyP/5PFiZDyF2zYOTi1tki7M2OMP3uW
+bqY1zxQxvYhCQ01mPk1P7Gg6mXbBqDKbYd7d3kWspWE2piPKIme1S92wh7Mdbt7XhNBaJHZE
HWw/ofKwp94Mv2E9vCzN/dIIkbR9OqxpcUXPzOMDyMsMqRm3bMXerQfFxlAhMJi1Oy1okUFJ0RnR
YW9is62BklHrjkIlfunrDPgwo6SYMhFpNU2aQ3/OThG0lSmMGD+IzjiOsGdaf3B71KQ==root@fedora1.linux.tux
Utilisation de ssh
[root@fedora1 ~]# ssh fedora3
Last login: Sun Mar 25 17:53:14 2007 from fedora1.linux.tux
[root@fedora3 ~]#
( La commande ssh supporte de nombreuses options , consulter le man ).
Pour les outils et les manipulations à réaliser , nous installerons sur Windows 2 logiciels :
putty et puttygen à récupérer sur: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Dans ce premier contexte on utilisera la clé privée précédement utilisée par root sur fedora1 pour se connecter à fedora3.
Il nous faut donc récuperer cette clé privée pour l'insérer dans putty.
Pour permettre à putty d'utiliser cette clé privé, on utilisera Puttygen pour la récupérer et la convertir dans un format exploitable par putty ( .ppk).
Ouvrir une session sur la machine sur laquelle se trouve la clé privé et l'on affiche la clé privé, ici fedora1 :
[root@fedora1 .ssh]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzg69sIkWbC3lsBozUyPq9bwpxxo/G1Rb0ESqafFMqnrsJBpw
hq5u7X4JDGwkV0QLArZgn8HHHz2KLRyutkgMZFlhH0VX0tcFyP/5PFiZDyF2zYOT
i1tki7M2OMP3uW+bqY1zxQxvYhCQ01mPk1P7Gg6mXbBqDKbYd7d3kWspWE2piPKI
me1S92wh7Mdbt7XhNBaJHZEHWw/ofKwp94Mv2E9vCzN/dIIkbR9OqxpcUXPzOMDy
MsMqRm3bMXerQfFxlAhMJi1Oy1okUFJ0RnRYW9is62BklHrjkIlfunrDPgwo6SYM
hFpNU2aQ3/OThG0lSmMGD+IzjiOsGdaf3B71KQIBIwKCAQEAvGU/t1jECyKmHVnI
hoc9OHGFSFKC1yiOdUYYJlj1oy6OwexJn7Vsu+DyVIAhOdfPjXOLir/L/041MI9A
pqhF2Bc0Odj/1rX2qSSMGeqakX2ucsFw9HDQ9MEboZ06QyQ2jGQSEz6RuL6wTDSg
hrMuuLzv4KFLBEDF6cxQD+zymd72hoy++gDZ3xmdpndytvXKDak6Fq1tkgKfKuk9
NTl2zSM+c16tA9HiCqlYAfQ3GKp3HQ53scjEaRgROQcv+ekoGK6jomPlvnHHtAW0
Jp68zg6JA3k/Fq4lN9qsElrtMIoGTpydULPdrV1mw6FdibKJNmF22UKC/HTFc70C
PTxPiwKBgQDxKSajqm27P7hRvjE92WMo0ytTmKUGkNYYfCEf/LvoM3f24KXKaXBv
BTyL7qxnrfqKkJndq1GpK8PAAlB4/fmM8o0Kas6swezGbuUmdVyCFIZ7u6ksSWEg
ik2P97cyJDya15qb3+mZmPoFzT8diO2ZbniFYdDMmSU88m4DE+TmSQKBgQDavKH0
Dg6pa6/LwIN4ZjXjYfod/B5Q8obx6ZvvCJBttHjr3F4nzuQmLDmKekrYYH72YF9B
nP3qR7fIWMdVyqDgxnw+wcFewSDrdIcQxto3xfJLU+qbSktKUSSjjrAdrLiXK5Ak
lCv5RM5irLv3rORFyG/msHCnsN63MNHiVUAX4QKBgQDqRTt6awuCsu2RPGpZVtVa
28OwSyP3v+Xr5kwQcdscFL2t/szwg68Mw0IhiMS8fR9ExvvepmyVtXxUH4Ffl6H2
onph5Bk6G3hLvC8ParGi714RzD3wgcwQ+2FKBpS0Xbc3VRnZP+o9cAjSb5xl1XkY
tHUT210ehiQsk7tTcmlUuwKBgQDH/OvX0laMRTMDbi8O/l0nqgk//HN9NYKxSp0y
UPkT2DQK2BuSHD5OyVkuJqrUdXtk6mW4VQVofBW+fQ4FS4vGMdCuaAFAsJMgaood
96LxKgIY/EQ2NUwmsJaG6NuI2G5BEeLfnWoIeWw89bMrlsIT6nTwLEm944nMD2DO
7tuDiwKBgG1r/htM4uCE8U08wmpaJADHbasAb1Dr7bWSjY9z1Pkyscsr7qyQ3YMW
OHP/CtP7rES2oq6Q32EjL3yzawP7h8k29/0l5bxpUbBKNPXaCvhwhni0qcwroKdf
m8Nt69mgsF2Orn8UtVkAoR5+0aLYgJ7S6/2+VX5xDHISVBpRkTSL
-----END RSA PRIVATE KEY-----
On lance un editeur Windows , par exemple notepad et on fait un copier-coller de cette clé dans notepad:
On enregistre ce fichier, ici je l'ai enregistré dans « Mes Documents » sous le nom « ma clé privée.txt »
Lancer Puttygen :
Menu Conversions ---> Import key
Ouvrir le fichier « ma clé privée.txt » précedemment enregistré dans « Mes documents » :
Enregistrer cette clé privée pour putty :
Si l'on choisit de ne pas protéger cette clé privée par une pass-phrase, on clique Oui sur le message suivant
On enregistre cette clé, ici je l'enregistre sous le nom « ma clé privée.ppk » dans « Mes documents » :
On en a terminé avec Puttygen, on lance putty :
Dans le champ « Host Name ( or IP Address ) : on saisit l'adresse IP ou le nom de la machine Linux sur laquelle on veut se connecter ( sous réserve que ce nom soit correctement résolu par un fichier hosts ou par DNS )
on choisit de se connecter sur le port 22 du serveur Linux , port du service ssh par defaut.
Et on choisit biensur d'utiliser le protocol SSH.
Dans la colonne « Catégory »,selectionner SSH puis Auth et avec le bouton Browse , pointer sur le fichier précédemment généré avec Puttygen :
Si l'on veut ne pas avoir à saisir le nom de login:
dans la colonne Category ---> Connection ----> Data, dans le champ Auto-login username renseigner le nom de login avec lequel se connectera , en l'occurence : root
On revient sur Session pour enregistrer ces différentes informations,
dans le champ Saved Sessions, je tape le nom sous lequel ces différentes informations seront sauvegardées
Puis bouton Open.
A la première ouverture de session :
Cliquer sur Oui
Lors des ouvertures de sessions suivantes, c'est la clé privée qui permettra l'autentification de l'utilisateur ( et non plus son mot de passe ) et c'est la combinaison de la clé privée et publique qui assurera le cryptage des données transitant par le réseau entre les deux postes .
Dans ce deuxième contexte on va utiliser la clé privée, non plus récupérée du système Linux mais générée avec puttygen.
Lancer puttygen, bouton Generate
et on bouge aléatoirement la souris dans l'espace blanc de la fenêtre.
Le couple de clés privée et publique a été créé. On les sauvegarde.
Exportation de la clé publique sur la machine Linux sur laquelle on va se connecter, ici toujours fedora3.
Copier-coller la clé publique affichée dans la fenêtre précédente dans le fichier /root/.ssh/authorized_keys sur fedora3 :
Utilisation de cette nouvelle clé privée :
Lancer putty
Plutôt que de recréer une nouvelle configuration , je vais réutiliser la configuration précedemment sauvegardée sous le nom « fedora3 » et modifier simplement la clé privée :
Load ---> fedora3
Category SSH , Auth
Bouton Open , pour utiliser ce nouveau couple de clé.