Qu'est-ce que c'est ?
SSL(Secure Socket
Layer) est un protocole de sécurisation des
échanges, développé par Netscape. Il a été conçu
pour assurer la sécurité des transactions sur
Internet (notamment entre un client et un
serveur), et il est intégré depuis 1994 dans les
navigateurs. Il existe plusieurs versions: la
version 2.0 développée par Netscape; la version
3.0 qui est actuellement la plus répandue, et la
version 3.1 baptisée TLS (transport Layer
Security, RFC
2246) et standardisée par l'IETF ( Internet Engineering
Task Force). SSL fonctionne de manière
indépendante par rapport aux applications qui
l'utilisent; il est obligatoirement au dessus de
la couche TCP et certains le considèrent comme un
protocole de niveau 5 (couche
session).
Pourquoi SSL ?
SSL permet d'assurer les
services de sécurité suivants:
- confidentialité : elle est obtenue
par l'utilisation d'
algorithmes
à chiffrement symétrique>de blocs comme DES,
FORTEZZA, IDEA, 3DES ou RC2, ou par des
algorithmes à chiffrement symétrique de flots
comme RC4 (la longueur des clés peut être
limitée suivant les législations propres à
l'exportation, et le padding correspondant
s'applique aux algorithmes par blocs).
- intégrité : l'intégrité des données
est assurée par l'utilisation de MACs (Message
Authentication Code) basés sur les
fonctions de hachage MD5 (16 octets) ou
SHA-1 (20 octets).
- authentification : SSL permet
l'authentification des 2 entités
(authentification client facultative) basé sur
des certificats X.509, et l'authentification des
données grâce aux MACs.
Les
sous-protocoles de SSL
Le protocole SSL est constitué de
quatre sous-protocoles: 1 ) Handshake qui
permet l'authentification mutuelle du client et
serveur, la négociation des algorithmes de
chiffrement, de hachage, et l'échange des clés
symétriques qui assurent le chiffrement. 2 ) le
protocole SSL Change Cipher Spec 3 ) le
protocole SSL Alert 4 ) le protocole SSL Record
Déroulement des échanges
SSL
Déroulement habituel d'un handshake
SSL avec authentification mutuelle :
- en noir, les échanges initiés par le
serveur.
- en rouge, les
échanges initiés par le client.
- en jaune,
les échanges correspondants à l'authentification
du client.
Les
échanges définis par le protocole SSL se déroulent
en deux phases:
1) Première phase :
authentification du serveur Suite à la
requête d'un client, le serveur envoie son
certificat au client et lui liste les
algorithmes cryptographiques, qu'il souhaite
négocier. Le client vérifie la validité du
certificat à l'aide de la clé publique du CA
(Certificate Authority) contenue dans le
navigateur. Si le certificat est valide, le
client génère un pré-master secret (PMS) de 48
octets qui servira à dériver le master secret
(MS) de même taille, 48 octets, ce qui
représente l'entropie maximale de la clé. Ce PMS
est chiffré avec la clé publique du serveur puis
transmis à ce dernier. Les données échangées par
la suite entre le client et le serveur sont
chiffrées et authentifiées à l'aide de clés
dérivées de la clé maître.
2) Deuxième phase :
authentification (optionnelle) du
client Le serveur (et seulement lui) peut
demander au client de s'authentifier en lui
demandant tout d'abord son certificat. Le client
réplique en envoyant ce certificat puis en
signant un message avec sa clé privée (ce
message contient des informations sur la session
et le contenu de tous les échanges précédents).
Remarques :
- L'authentification du client est facultative
et au bon vouloir du serveur. Elle est en fait
rarement utilisée dans la vie courante (qui
possède une paire de clés RSA certifiée?).
- L'authentification du réseau intervient dans
tous les cas avant celle du client, ce qui est
un gage de sécurité accrue.
- Comme dans IPSec (IKE phase 1),
l'authentification reprend les échanges
précédents et valide ainsi tout le handshake.
- Notez enfin que seule la clé publique du
serveur est utilisée pour faire du chiffrement;
celle du client ne sert que pour de la
signature.
Les
variables d'état d'une session
SSLUne session
SSL est définie par les variables suivantes:
Session ID (l'dentifiant de
session) une séquence arbitraire de 32 octets
choisie par le serveur pour identifier une
session.
Peer certificate (le
certificat du pair) c'est un certificat X 509 du
correspondant (soit pour un serveur ou un client).
Compression method
l'algorithme de compression utilisé, NULL
pour l'instant (ce champ reste vide)
Cipher spec (la suite de
chiffrement) définit les algorithmes de
chiffrement et de hachage
MasterSecret c'est un clé de
48 octets partagée entre le client et le serveur.
Is resumable (le drapeau)
c'est un flag qui indique si il est possible
d'ouvrir de nouvelles connexions sur la session en
question.
Les
variables d'état d'une connexion
SSL
Les
paramètres qui définissent une connexion SSL sont
ceux qui se seront rafraîchis pendant une session
lors d'établissement d'une nouvelle connexion. Ces
paramètres sont:
Server_random et
Client_random: deux nombres aléatoires de
32 octets, générés par le client et le serveur
lors de chaque connexion.
Server_MAC_write_secret: clé
secrète utilisé par le serveur pour calculer les
MACs
Client_MAC_write_secret: clé
secrète utilisé par le client pour calculer les
MACs
Server_write_key: clé
symétrique utilisé par le serveur pour le
chiffrement des données.
Client_write_key: clé
symétrique utilisé par le client pour le
chiffrement des données.
Initialization vectors:
vecteur d'initialisation pour le chiffrement par
bloc en mode CBC (Cipher Bloc Chaining), l'un du
coté serveur et l'autre du coté client.
Sequence number: chaque
message est numéroté, l'un pour le serveur,
l'autre par le client, et chacun codé sur 8
octets.
Le
protocole Handshake
Ce protocole permet
l'authentification obligatoire du serveur, du
client est optionnelle, et de négocier pour
choisir les suites de chiffrement qui seront
utilisées lors de la session.
Déroulement des échanges du
Handshake
*
message optionnel
ClientHello : ce message
contient: la version: version du protocole
SSL,client_random: nombre aléatoire,
session_id:l'identificateur de session, cipher
suite :la liste des suites de chiffrement
choisies, et algo décompression: la liste des
méthodes de compression.
ServerHello : ce message
contient: la version: version du protocole
SSL,Server_random: nombre aléatoire,
session_id:l'identificateur de session, cipher
suite :la liste des suites de chiffrement
choisies, et algo décompression: la liste des
méthodes de compression.
Certificate : ce message
contient soit le certificat de serveur
ServerKeyExchange : contient
le certificat de signature
CertificateRequest : le
serveur réclame un certificat au client
ServerHelloDone : la fin de
l'envoi de message
ClientKeyExchange : ce
message contient le PreMastersecret crypté à
l'aide PreMastersecret crypté à l'aide de la clé
publique du serveur.
CertificateVerify :
vérification explicite du certificat du client
Finished : fin du protocole
Handshake et le début de l'émission des données
Le
protocole ChangeCipherSpec
(CCS)
Ce
protocole comprend un seul et unique message (1
octet) qui porte le même nom que le protocole, il
permet d'indiquer au protocole Record la mise en
place des algorithmes de chiffrement qui viennent
d'être négociés.
Le
Protocole SSLRecord
Ce protocole intervient après
l'émission du message ChangeCipherSpec.il permet
de garantir : - la confidentialité à l'aide de
chiffrement des données - l'intégrité à l'aide
de génération d'un condensât.
Le
protocole SSL Alert
Ce protocole génère des messages
d'alerte suite aux erreurs que peuvent s'envoyer
le client et le serveur. Les messages sont
composés de 20 octets, le premier étant soit
fatal soit warning. Si le niveau de
criticité du message est fatal, la connexion SSL
est abandonnée. Le deuxième octet est utilisé pour
le code d'erreur. Liste des Messages du
protocol Alert:
Les erreurs fatales sont:
- bad_record_mac: réception d'un MAC erroné
- decompression_failure: les données
appliquées à la fonction de compression sont
invalides
- handshake_failure: impossibilité de négocier
les bons paramètres
- illegal_parameter: un paramètre échangé au
cours du protocole Handshake ne correspondait
pas avec les autres paramètres
- unexpected_message: message non reconnu.
Les warnings sont :
- bad_certificate: le certificat n'est pas bon
- certificate_expired: certificat périmé
- certificat_revoked: certificat révoqué
- certificat_unknown: certificat invalide pour
des raisons précisés au dessus
- close_notify: la fin d'une connexion
- no_certificate: réponse négative à une
demande de certificat
- unsupported_certificate: le certificat reçu
n'est pas reconnu
Les
ports utilisées par SSL
HTTPS (HTTP en SSL) |
443 |
SMTPS (SMTP en SSL) |
465 |
NNTPS |
563 |
LDAPS (LDAP en SSL) |
636 |
POP3S |
995 |
IMAPS |
993 |
TELNETS |
992 | En pratique,
pour accéder à un serveur qui utilise les services
SSL, on ajoute un "s" lors de la spécification du
protocole. Exemple : https://www.monserveur.com
Implémentations
Plusieurs offres commerciales du
serveur SSL sont disponibles, par exemple:
- SSLeay
- Netscape Entreprise Server
- Apache
- Oracle Web Apllication Server
- Internet Information Server (IIS)
- Lotus Domino d'IBM
- Java Server de Sun Microsystems
Aspects cryptographiques de
SSL: Le handshake SSL
permet aux 2 entités de choisir une suite
d'algorithmes cryptographiques pour assurer la
sécurité de leurs échanges. Cette suite sera de la
forme SSL_X_WITH_Y_Z où :
- X désigne l'algorithme utilisé pour
l'échange de clés : RSA ou Diffie-Hellman avec
signature DSS ou RSA. Notez que DH n'est
supporté que par la version 3.0 et non par la
2.0 de SSL. D'autre part, son implémentation
n'est pas sensible aux attaques type
man-in-the-middle car les paramètres
d'exponentiation sont authentifiés par les 2
extrémités.
- Y désigne l'algorithme de chiffrement (voir
le paragraphe Pourquoi SSL?)
- Z désigne l'algorithme de hachage (voir le
paragraphe Pourquoi SSL?)
La version 3.0
de SSL permet 31 possibilités de suites
d'algorithmes cryptographiques différentes. Une de
ces possibilités est de ne rien utiliser, ce qui
revient à utiliser des algorithmes fictifs ne
modifiant pas les données, ce que nous désignons
comme suit :
SSL_NULL_WITH_NULL_NULL
Un autre exemple est :
SSL_RSA_WITH_DES_CBC_MD5
Intégrité et
authentification
L'intégrité
est assurée au moyen de MACs (messages
authentication codes), qui ont la double
spécificité d'assurer à la fois intégrité et
authentification des données. Un MAC allie une
fonction de hachage (ici MD5 ou SHA-1, d'où une
longueur finale de 16 ou 20 octets) à une clé
secrète partagée par les 2 entités. Une façon
habituelle de générer des MACs est d'utiliser la
fonction HMAC ( RFC
2104); ici, SSL définit sa propre fonction
pour MACer, mais nous n'entrerons pas dans les
détails. Attention, les illustrations font
abstraction des headers, qui ne sont pas
inclus dans les données
protégées. ConfidentialitéLe
chiffrement peut-être soit par flots, soit par
blocs, suivant l'algorithme choisi. Prenons
l'exemple du chiffrement par flot (en gris les
données chiffrées):
Après
génération du MAC, les données sont directement
processées dans la fonction de
chiffrement. Quant au chiffrement par
blocs, il est nécessaire de rajouter du padding
avant le traitement, pour que la longueur totale
des données à traiter soit un multiple de la
taille d'un seul bloc (n x 64 bits par
exemple).
Evolutions du standard
:
La prochaine version
du standard aura quelques changements, parmi
lesquels on retrouve :
- Support obligatoire de DSA et D-H; RSA
devrait également être supporté en facultatif.
- Remplacement de la fonction prorpiétaire de
génération de MACs par le standard HMAC (RFC
2104)
- Protection du numéro de version de SSL par
les opérations de hachage (pour éviter les
attaques par rollback par exemple)
- Nouveau générateur de nombres aléatoires
(basé MD5 et SHA-1 à la fois), nouveaux messages
d'alerte ("Decryption failed") .
Les
attaques et faiblesses de SSL
- SSL est théoriquement vulnérable aux
attaques par force brute en cas d'utilisation de
clés 40 bits, il est donc conseillé d'utiliser
des clés de 128 bits.
- SSL est très vulnérable aux attaques
par le milieu (man in the middle): l'attaquant
intercepte (physiquement) la requête du client
et se fait passer pour le serveur auprès de lui,
tout en se faisant passer pour un client auprès
du serveur légitime. Il reçoit donc la totalité
du flux supposé protégé.
- SSL est faible dans le sens où il n'impose
pas l'authentification client (ce serait
d'ailleurs difficilement gérable en pratique).
- SSL est faible enfin car il présente des
souplesses dans son implémentation, notamment en
ce qui concerne la vérification des
certificats des serveurs. En effet, le
client devrait vérifier la signature, la
validité ainsi que le statut de révocation du
certificat (au moyen de CRLs ou du protocole
OCSP) et devrait s'assurer que le CA concerné
appartient bien aux CAs auxquels il fait
confiance. Or cela n'est pas obligatoire, et
peut permettre à un attaquant de substituer sa
propre clé publique à celle du serveur original
puis de rediriger le traffic vers son faux site
tout en faisant croire au client qu'il
communique bien avec son serveur légitime. Il
est donc important de bien vérifier les URLs par
exemple.
- SSL est éventuellement vulnérable à des
attaques plus poussées, basées sur des
propriétés cryptographiques. L'utilisation de
certificats par exemple nécessite une grande
vigilance (date de validité, multitude de CAs
inconnus certifiant tout et n'importe quoi... Il
suffit de jeter un coup d'oeil à la liste
contenue dans votre navigateur pour s'en rendre
compte); il existe également des attaques par
brute-force sur l'échange de la clé symétrique
(2^20 essais) ou des attaques dites de rollback
dans lesquelles l'attaquant cherche à modifier
le choix des algos d'échanges de clés de façon à
ce que les 2 entités n'utilisent pas les mêmes
(RSA et DH par exemple). Ainsi, cet attaquant
pourra déchiffrer le message car les paramètres
fournit par le serveur dans le cas d'un
algorithme n'offrent aucune sécurité si on les
applique à un autre... Cette attaque peut-être
réalisée si une session 3.0 est résumée en
session 2.0 par exemple.
Conclusion
Le protocole SSL est actuellement
le seul protocole de sécurisation déployé et
utilisé à grande échelle, son grand avantage étant
sa transparence par rapport au protocole TCP. Il
garantit l'authentification, la confidentialité et
l'intégrité des données. Avec son architecture
modulaire, il ne se limite pas à des applications
traditionnelles, puisque il intègre les réseaux
sans fil comme le WAP (Wirless Transport Layer)
sous le nom WTLS ( Wireless Transport Layer
Security).
Références:
http://www.netscape.com/eng/ssl3/
|