Realm, CoreData killer
Realm, CoreData killer
Sommaire
Les protocoles SSL / TLS peuvent être divisés en 2 couches.
La première couche est constituée par des protocoles de négociation (Handshake, Cipher, Alert) et la deuxième couche est le protocole Record.
L’image ci-dessous illustre les différentes couches :
Traduit “poignée de main” en Français, ce protocole permet au serveur et au client de :
Voici en détails comment se déroule le handshake, dans l'ordre chronologique :
1 - Client Hello
Envoi de la version maximale supportée (SSL = 3.0), de la suite d'algorithmes supportés (par ordre de préférence décroissant) et une valeur aléatoire de 32 octets. Exemple :
Secure Socket Layer
SSLv2 Record Layer: Client Hello
Length: 103
Handshake Message Type: Client Hello (1)
Version: SSL 3.0 (0x0300)
Cipher Spec Length: 78
Session ID Length: 0
Challenge Length: 16
Cipher Specs (26 specs)
Cipher Spec: SSL2_RC4_128_WITH_MD5 (0x010080)
[ more Cipher Specs deleted ]
Challenge
2 - Server Hello
Choix de la version de la suite d'algorithmes (Cipher Suite) et d'une valeur aléatoire.
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Handshake Protocol: Server Hello
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 74
Handshake Protocol: Server Hello
Handshake Type: Server Hello (2)
Length: 70
Version: SSL 3.0 (0x0300)
Random
gmt_unix_time: Apr 24, 2006 11:04:15.000000000
random_bytes: FE81ED93650288A3F8EB63860E2CF68DD00F2C2AD64FCD2D…
Session ID Length: 32
Session ID (32 bytes)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
Compression Method: null (0)
3 - Certificate (optionnel)
Envoi d'une chaîne de certificats par le serveur. Le premier certificat est celui du serveur, le dernier est celui de l'autorité de certification.
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Handshake Protocol: Certificate
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 836
Handshake Protocol: Certificate
Handshake Type: Certificate (11)
Length: 832
[ Certificate details deleted ]
4- Certificate Request (optionnel)
Demande un certificat au client pour l'authentifier.
5 - Server Key Exchange (optionnel)
Message complémentaire pour l'échange des clés. Ce message contient la clé publique du serveur utilisée par le client pour chiffrer les informations de clé de session.
6 - Server Hello Done
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Handshake Protocol: Server Hello Done
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 4
Handshake Protocol: Server Hello Done
Handshake Type: Server Hello Done (14)
Length: 0
7 - Certificate (optionnel)
Certificat éventuel du client si le serveur demande une authentification.
8 - Client Key Exchange
Le client produit un secret pré-maître (encrypted pre-master key) et le crypte avec la clé publique du certificat du serveur. Ces informations sont chiffrées une deuxième fois avec la clé publique du serveur (et non la clé publique du certificat du serveur) reçue dans le message Server Key Exchange (cf. étape 5).
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Handshake Protocol: Client Key Exchange
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 132
Handshake Protocol: Client Key Exchange
Handshake Type: Client Key Exchange (16)
Length: 128
9 - Certificate Verify (optionnel)
Message contenant une empreinte (hash) signée numériquement et créée à partir des informations de clé et de tous les messages précédents. Ce message permet de confirmer au serveur que le client possède bien la clé privée correspondante au certificat client (cf. étape 7)
10 - Change Cipher Spec
Passage du client en mode chiffré avec la clé master comme clé symétrique.
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
Content Type: Change Cipher Spec (20)
Version: SSL 3.0 (0x0300)
Length: 1
Change Cipher Spec Message
11 - Client Finished
Fin des émissions du client, ce message est chiffré à l'aide des paramètres de la suite de chiffrement.
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Handshake Protocol: Finished
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 64
Handshake Protocol: Finished
Handshake Type: Finished (20)
Length: 36
MD5 Hash
SHA-1 Hash
12 - Change Cipher Spec
Passage du serveur en mode chiffré avec la clé master.
Exemple :
Secure Socket Layer
SSLv3 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
Content Type: Change Cipher Spec (20)
Version: SSL 3.0 (0x0300)
Length: 1
Change Cipher Spec Message
SSLv3 Record Layer: Handshake Protocol: Finished
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300)
Length: 64
Handshake Protocol: Finished
Handshake Type: Finished (20)
Length: 36
MD5 Hash
SHA-1 Hash
13 - Server Finished
Confirmation au client du passage en mode chiffré. Ce message est chiffré à l'aide des paramètres de la suite de chiffrement.
14 - Encrypted Data
Le tunnel SSL / TLS est établi, c'est maintenant le Record Protocol qui prend le relais pour chiffrer les données.
Auteur(s)
Ilan Benichou
Développeur Fullstack (PHP/JS/IOS/DEVOPS), j'adore découvrir de nouvelle chose, toujours prêt à relever un challenge.
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Rendez plus robuste votre application mobile en ajoutant des tests fonctionnels
Nous allons découvrir un outil qui permet d'automatiser des tâches fastidieuses en mobile.