Définition :
- SSL : Secure Socket Layer
Protocole développé à l’origine par Netscape
- TLS : Transport Layer Security
Successeur du SSL. Protocole développé par l’IETF (Internet Engineering Task Force)
Ces deux protocoles permettent de sécuriser les échanges transitant entre un client et un serveur.
L’objectif est multiple :
- Réaliser l’authentification du serveur
- Réaliser si possible l’authentification du client (facultatif)
- S’assurer de la confidentialité des données échangées
- Valider l’intégrité des données échangées
Le SSL comme le TLS est une surcouche aux protocoles.(Exemple : HTTP → HTTPS)
Versions et sortie des protocoles :
Protocole |
Année de sortie |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Diagramme séquentiel des échanges:
Un peu de détail :
Ci-dessous le détail des différents échanges réalisés :
1 – Client Hello
Le client contacte le serveur
2 – Server Hello
Le serveur envoie les informations nécessaires pour la communication avec le client
- Version des protocoles SSL
- Session ID
- Sélection de Hash
- Certificats serveurs (clé publique)
- Facultatif: Requête du certificat client
3 – Réponse au serveur avec envoie des informations
Validation du certificat serveur (CN / Date / Issuer)
Création d’une clé (Pre-master secret)
Chiffrement de ces données à l’aide de la clé publique du serveur
4 – Récupération et génération de la clé finale (Master secret)
Le serveur utilise la clé privée pour déchiffrer les données du reçues
Génération de finale (Master secret) avec les informations reçues du client
5-Génération d’une clé de session
Génération d’une clé de session entre le client et le serveur grâce au Master secret qui sera la clé symétrique utilisée pour chiffrer et déchiffrer les informations échangées au cours de la session SSL
6- Chiffrement des données avec la clé de session
Les données échangées seront chiffrées avec la clé de session
Test d’un point de vue client :
Il est possible de réaliser une négociation SSL en utilisant le logiciel OpenSSL (Simulation côté client) :
openssl.exe s_client -connect synetis.com:443 -state -ssl3
Loading ‘screen’ into random state – done
CONNECTED(000001A0)
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=3 /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
verify error:num=19:self signed certificate in certificate chain
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
—
Certificate chain
0 s:/C=FR/2.5.4.17=75017/ST=PARIS/L=Paris/2.5.4.9=55 rue de Tocqueville/O=SYNETIS SAS/OU=0002 522945153/CN=ticketing.synetis.com
i:/C=FR/OU=High Assurance/O=OVH SAS/CN=OVH Secure Certification Authority
1 s:/C=FR/OU=High Assurance/O=OVH SAS/CN=OVH Secure Certification Authority
i:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
2 s:/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Hardware
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
3 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
—
Server certificate
—–BEGIN CERTIFICATE—–
MIIFkjCCBHqgAwIBAgIQVKiaGe+rSuvYJxOIBghRazANBgkqhkiG9w0BAQUFADBl
MQswCQYDVQQGEwJGUjEXMBUGA1UECxMOSGlnaCBBc3N1cmFuY2UxEDAOBgNVBAoT
B09WSCBTQVMxKzApBgNVBAMTIk9WSCBTZWN1cmUgQ2VydGlmaWNhdGlvbiBBdXRo
b3JpdHkwHhcNMTEwNjA2M…
—–END CERTIFICATE—–
subject=/C=FR/2.5.4.17=75017/ST=PARIS/L=Paris/2.5.4.9=55 rue de Tocqueville/O=SYNETIS SAS/OU=0002 522945153/CN=ticketing.synetis.com
issuer=/C=FR/OU=High Assurance/O=OVH SAS/CN=OVH Secure Certification Authority
—
No client certificate CA names sent
—
SSL handshake has read 5692 bytes and written 304 bytes
—
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 2048 bit
SSL-Session:
Protocol : SSLv3
Cipher : EDH-RSA-DES-CBC3-SHA
Session-ID: 91702C4667FAB9311E775B4D735B5FF123E0D9EFC624B805E31D6FA9B1D8E015
Session-ID-ctx:
Master-Key: 1D769A534E35D045D023EAE59EC20E0ACE6D4B40A47F832187037AEA39031C1E483E6D12D2C1B685BEE309577E56C3A7
Key-Arg : None
Start Time: 1447878711
Timeout : 7200 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
—
Sources :
Sébastien
Manager
[:]