You are on page 1of 55

Les problmes de scurit sur Internet

Confidentialit (eavesdropping)
Les donnes sont intactes, mais peuvent tre rcupres par un tiers.

Intgrit (tampering)
Les donnes sont modifies ou remplaces lors de leur transit.
Problme du rejeu de donnes interceptes

Usurpation d'identit (impersonation): 2 variantes


Spoofing : typiquement, usurpation d'une identit valide
Envoyer des mails de chirac@elysee.gouv.fr, ou s'assigner l'@IP d'une
machine valide.

Misrepresentation : maquillage de l'identit


Installer sur www.vendeur.org un site qui ressemble www.vendeur.com, et
enregistrer des commandes par carte bleue.

Problmes d'authentification (client et/ou serveur)


Problmes de non-rpudiation
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 1

Moyens cryptographiques
Cryptage/dcryptage (chiffrement)
Confidentialit: donnes incomprhensibles lors du transit
Authentification: ncessit de disposer de l'autre cl

Hachage cryptographique
Intgrit: toute modification est dtecte

Signature numrique
Authentification: s'assurer de l'identit de l'metteur de donnes
Intgrit: s'assurer que, si la signature est valide, les donnes n'ont
pas changes depuis leur signature
Non-rpudiation: prouver que l'metteur a bien mis ces donnes,
et est le seul a avoir pu le faire (autorisation de prlvement bancaire)

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 2

Chiffrement symtrique
cl prive, ou cl symtrique
Le rcepteur DOIT avoir la cl pour dchiffrer (si qq'un d'autre la trouve,
intgrit ET authentification sont perdues)
Avantage: peut tre trs efficace (rapide); permutations, XOR...
Inconvnient: connatre (ou communiquer) la cl aux deux parties
Ex: DES, RC2, TripleDES (bloc cipher), RC4 (stream cipher).
Scurit dpend de la taille de la cl de chiffrement, de 40 168 bits

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 3

Chiffrement asymtrique
cl publique, ou cl asymtrique
La cl prive est connue d'une seule partie, la cl publique est diffuse
tout le monde
Les donnes chiffres avec la cl publique ne peuvent tre dchiffres que par
le dtenteur de la cl prive (le bon sens pour les donnes sensibles).
Pour la signature, c'est le contraire: le signataire chiffre les donnes avec sa cl
prive, et le dchiffrage avec la cl publique prouve l'identit du signataire

Plus lent (algos base d'exponentiations). Ex: RSA, Elgamal

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 4

Hachage cryptographique
Pour remdier au problme d'intgrit
Fonction de hachage: one-way hash ou message digest
Proprits:
La valeur de hachage produite pour les donnes haches est unique
La moindre modification des donnes produit une valeur de hachage
diffrente
Il est trs difficile de retrouver les donnes partir de la valeur de hachage

Coupl avec un algorithme de chiffrement asymtrique, permet de


produire une signature numrique :
La signature d'un ensemble de donnes est une valeur de hachage de ces
donnes, crypte par une cl prive
plus la description des algos de hachage et de chiffrement

Exemple d'algorithmes: SHA-1, MD2, MD5


Sert de base des algorithmes de chiffrement efficaces cl secrete
partage, permettant d'assurer la fois l'authentification et l'intgrit
Hash Message Authentication Code (HMAC), HMAC-MD5, HMAC-SHA1
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 5

Signature numrique
partir des informations signer
On calcule la valeur du hachage cryptographique de ces donnes
On chiffre de cette valeur avec sa propre cl prive => signature
On transmet les donnes, la signature, l'identit du signataire et les
deux algorithmes utiliss

Le rcepteur
Reoit les donnes D et la signature chiffre SC
Applique le hachage cryptographique D et trouve H1
Rcupre la cl publique du signataire partir de son identit
L'utilise pour dchiffrer la signature reue SC et trouve H2
Compare H1 et H2
La signature est valide si ils sont identiques

Ex: DSS (SHA1withDSA) ou d'autres comme MD2withRSA, MD5withRSA,


SHA1withDSA
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 6

Mcanisme de signature cls


asymtriques

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 7

Contraintes pour la validit d'une


signature
Si (H1==H2), i.e. signature valide, cela assure:
L'intgrit: les donnes signes n'ont pas t modifies
L'authentification: les donnes proviennent bien du signataire
Plus exactement, la cl publique utilise pour dchiffrer la signature
correspond bien la cl prive qui a servi la chiffrer
Savoir si ce signataire correspond bien l'identit prsume de l'metteur
de la signature requiert un autre mcanisme (certificat)

La non-rpudiation: seul le signataire a pu produire ces donnes

Pour vrifier une signature, il faut avoir:


Les deux algorithmes (hachage cryptographique et chiffrement)
Les noms des algos peuvent tre transmis en clair avec la signature

L'identit du signataire (pour obtenir sa cl publique)


Attention: la cl publique du signataire NE DOIT PAS tre transmise
(simplement) avec la signature
Possibilit d'interception
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 8

Interception de signature avec cl


publique: le problme
Alice veut envoyer s= je suis Alice Bob
Signature d'Alice: HashCrypto(s) = 123, Chiffr(privateAlice,123) = ~#^

Si Alice envoit dans son message sa cl publique


[s, Alice, HashCrypto, Chiffr, ~#^, publicAlice]

Alors un intermdiaire Charlie peut intercepter ce message et:


Rcuprer s et sa valeur de hachage Chiffr(publicAlice, ~#^) = 123
Crer un couple de cl privateCharlie/publicCharlie
Signer le message avec privateSpy: Chiffr(privateCharlie,123)=@&$
Envoyer Bob l'information initiale, en se faisant passer pour Alice et
en fournissant sa propre cl publique
Soit : [s, Alice, HashCrypto, Chiffr, @&$, publicCharlie ]

Du point de vue de Bob, qui reoit au final ces informations


La signature est vrifiable , mais elle n'autentifie pas le signataire
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 9

Solution: le certificat
Dlivr par une autorit de certification,
Certificate Authority (CA),
certifie une identit
Associe une cl publique au nom d'une entit (le sujet du certificat)
Contient d'autres informations, comme les dates limites de validit du
certificat, l'identit de l'metteur du certificat, un numro de srie, etc.
Il permet d'viter d'associer Alice publicCharlie
Cette association est signe par l'metteur du certificat
Si on ne connait pas Alice, mais qu'on connat l'autorit de certification
qui a mis le certificat associant publicAlice Alice (l'metteur et le
signataire du certificat) et qu'on lui fait confiance
alors on utilise la cl publique connue de l'autorit de certification de
confiance pour vrifier la signature du certificat et on accepte le fait que
la cl publique trouve dans le certificat soit bien celle d'Alice

Reporte le problme sur le CA: notion de chane de certificats


Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 10

Certificat X.509v3 (ITU 1998)


X.509: Norme de description des certificats (RFC 2459)
Chaque certificat contient les informations suivantes:
Numro de version de X.509 utilise
Numro de srie unique du certificat attribu par l'metteur
Algorithme utilis pour signer le certificat
Distinguish Name de l'metteur du certificat
Priode de validit du certificat
Distinguish Name du sujet
Cl publique du sujet et algorithme pour lequel elle est valable
Extensions ventuelles

Une partie signature


L'algorithme utilis pour signer le certificat
La signature de ce certificat, chiffre avec la cl prive de l'metteur

Les distinguished name (DN) sont de la forme


nom canonique (CN), organisme (O), ville (L), code pays (C), etc.
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 11

Certificate:
Data:
Version: v3 (0x2)
Serial Number: 3 (0x3)
Signature Algorithm: PKCS #1 MD5 With RSA Encryption
Issuer: OU=Ace Certificate Authority, O=Ace Industry, C=US
Validity:
Not Before: Fri Oct 17 18:36:25 1997
Not After: Sun Oct 17 18:36:25 1999
Subject: CN=Jane Doe, OU=Finance, O=Ace Industry, C=US
Subject Public Key Info:
Algorithm: PKCS #1 RSA Encryption
Public Key:
Modulus:
00:ca:fa:79:98:8f:19:f8:d7:de:e4:49:80:48:e6:2a:2a:86:
... several lines deleted...
7d:d8:99:cb:0c:99:34:c9:ab:25:06:a8:31:ad:8c:4b:aa:54:
91:f4:15
Public Exponent: 65537 (0x10001)
Extensions:
Identifier: Certificate Type
Critical: no
Certified Usage:
SSL Client
Identifier: Authority Key Identifier
Critical: no
Key Identifier:
f2:f2:06:59:90:18:47:51:f5:89:33:5a:31:7a:e6:5c:fb:36:
26:c9
Signature:
Algorithm: PKCS #1 MD5 With RSA... several lines deleted...
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 12

Confiance dans un certificat


Les CA (autorits de certification) valident des identits
et mettent des certificats
Ils peuvent tre indpendants ou grer leur propres
mcanisme de certification

Clients ou serveurs manipulent des certificats


Ils grent des listes de certificats des autorits de certification
en qui ils ont confiance (Trusted CA certificates)

Organisation des CA de manire hirarchique


La racine de la hirarchie s'auto-certifie
On suppose qu'elle sera de confiance pour l'utilisateur

Chaque niveau en dessous est certifi par le CA du niveau au


dessus.
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 13

Exemple d'organisation hirarchique de


CA
Un certificat mis par Root CA est certifi par Root CA
Un certificat mis
par USA CA
est certifi
par RootCA
Ces hirarchies
sont reprsentes
par des chanes
de certificats

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 14

Chanes de certificats
Dans une chane de
certificats:
Chaque certificat est suivi
par le certificat de son
metteur
Chaque certificat contient
le nom (DN) de son metteur,
qui est le sujet du certificat
suivant dans la chane
Chaque certificat est sign
avec la cl prive de son
metteur. Cette signature
peut tre vrifie avec la
cl publique situe dans le
certificat de l'metteur, qui
est le prochain dans la chane
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 15

Vrifier une chane de certificats


1. Vrifier la priode de validit w.r.t heure vrificateur.
2. Localiser l'metteur du certificat
Soit dans la BD de certificats locale du vrificateur (client ou serveur)
Ou dans la chane de certificat fournie par le sujet (ex: SSL)

3. La signature du certificat est vrifie avec la cl publique


trouve dans le certificat de l'metteur
4. Si l'metteur du certificat est de confiance dans la BD
de certificat du vrificateur, alors la vrification s'arrte (OK).
Sinon, le certificat de l'metteur est vrifi en suivant la
chane de certificat (retour tape 1).

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 16

Vrification de chane: exemple 1

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 17

Vrification de chane: exemple 2

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 18

Vrification de chane: exemple 3

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 19

Secure Socket Layer


Initialement dvelopp par Netscape, SSL est devenu
un standard permettant d'assurer au dessus de TCP/IP:
La confidentialit et l'intgrit des donnes changes dans
les deux sens (bi-directionnel)
La dtection des rejeux
L'authentification du serveur
L'authentification du client

Ne fournit pas la non-rpudiation


Une requte peut avoir t gnre par le serveur

N'assure pas la confidentialit du trafic


Adresses des interlocuteurs et frquence des changes
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 20

SSL : modle
SSL en est la version 3.1 chez Netscape, ce qui
correspond chez IETF la version 1.0 de TLS
(Transport Layer Security), dfinie par la RFC 2246.
S'intercale entre la couche transport TCP et les
couches applicatives suprieures

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 21

Ce que permet SSL


L'authentification, par le client, du serveur contact
La slection, par le client et le serveur, d'un ensemble
d'algorithmes cryptographiques qu'ils supportent tous
les deux
L'authentification ventuelle, par le serveur, du client
L'utilisation de chiffrement cl publique pour
gnrer des secrets partags
L'tablissement d'une connexion SSL chiffre

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 22

Ce dont SSL a besoin


Pour cela, SSL ncessite
Un algorithme cl publique d'change de cls
Un algorithme de signature cl publique
(ventuellement vide: anon)

Un algorithme de chiffrement cl secrte


Un algorithme de hachage cryptographique

Ces suites d'algorithmes sont reprsents (RFC 2246) par


des chanes de caractres, par exemple
SSL_RSA_WITH_RC4_128_MD5
TLS-DHE_anon_WITH_RC4_128_MD5
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 23

Le protocole SSL
Le protocole SSL est compos de deux sous-couches
Sous-couche basse
Protocole Record

Sous-couche haute
Protocoles Handshake, Change Cipher, Application Data et Alert

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 24

Protocole Record
Encapsule les donnes
transmises et assure
La confidentialit
grce au chiffrement
L'intgrit grce
l'algorithme HMAC
(Hashed Message
Authentication Code)
Hachage crypto avec
cl secrte partage
RFC 2104

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 25

Protocole Record (suite)


Les cls secrtes utilises par les algos de Record sont
gnres pour chaque connexion
partir des valeurs ngocies dans le Handshake

Record est un protocole tat, dfini par


Le ct (client oui serveur)
L'algorithme de chiffrement utiliser
L'algorithme de hachage utiliser
Une cl secrte primaire (master secret)
Une valeur alatoire du client
Une valeur alatoire du serveur
Une mthode de compression (qui vaut null)

Ces valeurs sont utilises pour gnrer


Les cls secrtes du client et du serveur pour HMAC
Les cls secrtes du client et du serveur pour le chiffrement
ventuellement des IV (Initialisation Vector) pour chanage de blocs
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 26

Change Cipher, Alert et Application Data


Protocole Change Cipher
Sert indiquer le changement de chiffrement
Un seul message d'un octet

Protocole Alert
Permet d'indiquer, par des messages sur 1 ou 2 octets, tout
type d'erreur l'utilisateur, et de fermer la connexion

Protocole Application Data


Simple relai des applications de la couche applicative
suprieure vers le protocole Record

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 27

Protocole de Handshake
Cette partie du protocole permet au client et au serveur
d'changer des informations permettant
Au serveur de s'authentifier auprs du client
Au client et au serveur de crer conjointement les cls
symtriques utilises pour assurer le chiffrement /
dchiffrement rapide et l'intgrit des donnes durant la
session.
En gros, quatre phases
1. changes Hello
2. Envoi d'informations du serveur au client
3. Envoi d'informations du client au serveur
4. changes Finish

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 28

Etapes du Handshake: phase 1


Phase 1: Hello
Le client envoit au serveur un message Hello
Version de SSL supporte, suites d'algorithmes supports, valeur
alatoire horodate, identificateur de session (ventuellement vide)

Le serveur envoit au client un message Hello


Version de SSL compatible avec le client, algorithmes choisis supports
par le client, valeur alatoire horodate, identificateur de session

L'identificateur de session permet de rutiliser la session pour


rengotier quelques paramtres
C'est toujours le client qui initie la communication par un
Hello, mais ensuite, n'importe qui peut demander une
rengotiation dans la session en cours

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 29

Etapes du Handshake: phase 2


Phase 2: Envoi d'informations du serveur au client
Si la suite d'algos choisie contient un algo de signature (diffrent de
anon), le serveur envoit un message Certificate
Contient une chane de certificats X509 compatible avec l'algorithme de
signature utilis

Si les infos du certificat du serveur (ventuellement vide) sont


insuffisantes, le serveur peut mettre un message Server Key
Exchange
Contient des paramtres pour l'change de cls, signs avec la cl prive
associe au certificat mis

Si le serveur a besoin d'authentifier le client, il met galement un


message Certificate Request
Dcrit les types de certificats reconnus (DSA ou RSA) et la liste des DN
des CA connus par le serveur

Le serveur termine par l'envoi d'un message Server Hello Done

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 30

Etapes du Handshake: phase 3


Phase 3:
Si le serveur a mis un Certificate Request, le client lui renvoit
s'il le peut un certificat respectant les paramtres dcrits par le serveur
sinon, il renvoit un message vide

Le client envoit un message Client Key Exchange pour changer une


cl primaire prliminaire
L'change se fait en utilisant l'algo d'change de cl et la cl publique
trouve dans le certificat du serveur ou dans les paramtres du Server
Key Exchange
Cette cl primaire prliminaire est gnre partir des donnes
changes depuis le dbut du hanshake, chiffre avec la cl publique du
serveur (trouve dans son certificat), et envoye au serveur qui pourra la
dchiffrer avec sa cl prive

Si le client a mis un certificat, il renvoit un Certificate Verify


Sign avec sa cl priv, que le serveur pourra lire avec la cl publique
trouve dans le certificat: termine l'authentification du client
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 31

Etapes du Handshake: phase 4


Phase 4: Fin du handshake
partir de la cl primaire prliminaire et des valeurs alatoires
changes, le client comme le serveur gnrent une cl primaire de
48 octets en utilisant une PRF (Pseudo Random Function)
Le client envoit un message Change Cipher: il passe en mode chiffr
Puis un message Finish
contient une valeur calcule avec une PRF partir de la cl primaire et les
valeurs de hachage des messages prcdents et d'un label

Le serveur envoit un message Change Cipher, puis Finish


Si le client russit dchiffrer les donnes, le serveur est authentifi

Ensuite, les donnes sont changes, chiffres en fonction de


ce qui a t ngoti, avec le sous-protocole Application Data
la fin de la connexion, les 2 parties s'changent des Close Message

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 32

Handshake - illustration

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 33

Prcautions particulires
Une connexion SSL est aussi sre que les algorithmes
cryptographiques qu'elle utilise: pas plus!
C'est l'utilisateur (application) de vrifier que SSL ngocie
des algorithmes qu'il considre comme srs

De plus, avant d'accepter un certificat, client et serveur


Doivent vrifier la date de validit
Doivent vrifier la signature du certificat
Ensuite, doivent dcider s'ils ont confiance ou non en ce certificat
En fonction de l'metteur (trusted CA)
En fonction du DN prsent dans le certificat (le nom canonique CN doit
correspondre au nom DNS du serveur).
Peut ncessiter de demander l'utilisateur

En fonction d'une liste de certificats rvoqus

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 34

Attaque Man in the Middle


Lorsqu'un client a constat que la cl publique d'un
metteur de certificat permettait de vrifier la signature
de ce certificat, il lui reste assurer que cet metteur
est bien celui prtendu (et la manire de rcuprer sa
cl publique)
Pour cela, il doit comparer le nom DNS du serveur au nom de
l'metteur du certificat
Alice
Alice
publicKey
Algos
Signature privateKey

Charlie
Alice
publicKey
Algos
Signature

Etienne Duris Universit de Marne-la-Valle Mars 2005

Alice
publicKey
Algos
Signature privateKey

Bob
Alice
publicKey
Algos
Signature
Page 35

JSSE (Java Secure Socket Extension)


Support pour SSL
Packages javax.net, javax.net.ssl, javax.security.cert

Fait partie des diffrents frameworks concernant la


scurit en Java, qui s'entrecoupent
JCA (Java Cryptography Architecture) et JCE (Java
Cryptography Extension)
Tout ce qui permet de grer les algorithmes cryptographiques et le
stockage des cls, des certificats, etc., majoritairement dans
javax.security et ses sous-packages, et javax.crypto

JAAS (Java Authentication and Authorization Service)


La gestion de tous les aspects d'authentification, d'autorisation et leurs
acteurs, principalement dans javax.security.auth

Autres: Java SASL, SSL-based RMI socket, etc.


Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 36

JSSE, fonctionalits
Depuis version 1.4, classe standard
Avant, classes d' extension standard

Dcoupage interface/implmentation (notion de provider )


Implmentation dcouple de l'API
Paramtrage facile

Dans J2SDK, depuis 1.4,


Interface (API) supporte SSL 2.0, 3.0 et TLS 1.0
Implmentation (SunJSSE) supporte SSL 3.0 et TLS 1.0

Avantages
Offre les classes SSLSocket, SSLServerSocket et SSLEngine (nio)
100% pur Java, accs simple SSL, fonctions HTTPS
Support pour l'implantation et la ngotiation de nombreux algorithmes
Support pour gestion et l'accs au stockage des cls / certificats
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 37

Classes principales

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 38

Les classes principales


Une SSLSocket peut tre cre
Soit par un accept() sur un SSLServerSocket
Soit par une SSLSocketFactory

De mme, une SSLServerSocket doit tre cre par une


SSLServerSocketFactory
Les SSLSocketFactory comme les SSLServerSocketFactory
sont cres par un SSLContext, qui regroupe
L'implantation du protocole SSL utiliser
Un objet (KeyManager) qui permet de dcider quelle cl prive et quel
certificat utiliser pour s'authentifier
Un objet (TrustManager) qui permet de dcider si l'on fait confiance ou
non en un certificat reu

Les SSLEngine (nio) sont crs directement par le SSLContext


Les connexions SSL sont ensuite associes des SSLSession
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 39

Usage simple
Pour rcuprer et initialiser un SSLContext
Par un appel getDefault() sur la classe correspondante
Ces 2 mthodes statiques crent
Un SSLContext par dfaut
Avec un KeyManager par dfaut (et son KeyManagerFactory)
Un TrustManager par dfaut (et son TrustManagerFactory)
Un RandomGenerator par dfaut

Utilisent pour cela les fichiers par dfaut de gestionnaire de


cl/confiance, dfinis par des proprits systme
KeyStore/TrustStore
Objets de la classe javax.security
Nom de format de stockage (JKS, PKCS12)
Fournisseur d'implantation (SunJSSE)
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 40

Pour grer toutes les tapes et tous les paramtres


Crer explicitement un SSLContext
javax.net.ssl.SSLContext.getInstance(protocole,provider)
Exemples:
Protocole: "SSL", "SSLv3", "TLS", "TLSv1"
Provider: "SunJSSE"

Puis l'initialiser
init(KeyManager[] km,TrustManager[] tm,SecureRandom rdm)
Les Key/TrustManager peuvent tre crs en implantant les interfaces
correspondantes de toute pice, ou en utilisant les fabriques
(Key/TrustManagerFactory), avec leurs mthodes statiques
getInstance() et leurs mthodes init()
Celles-ci peuvent tre initialises par des KeyStore/TrustStore

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 41

Les cls et les certificats


Ncessaire SSL, pour dterminer une identit
Grs dans des objets de stockage des cls (KeyStore)
Pour obtenir la cl publique d'un signataire partir de son
identit
Associe une chane de certificats (cl publique) une identit,
rfrence par un alias (usage public)

Pour la signature, on a galement besoin de cet objet de


stockage,
mais alors il doit associer l'identit, en plus du certificat, la cl prive
qui permettra de signer (usage personnel)

Outil keytool permet, via la ligne de commande,


de crer des cls, de grer les fichiers de stockage des cls
(.keystore) et de stockage des certificats des autorits de certification
(cacerts)
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 42

java.security.KeyStore (gnral)
Objets construits par getInstance(format, provider)
Initialis ( partir d'un fichier) par
load(InputStream stream,char[] password)

Chaque entre de l'objet de stockage est un alias


Possibilit de rcuprer les cls et certificats associs
Key getKey(String alias, char[] password)
Certificate[] getCertificateChain()

Possibilit de modifier l'objet de stockage


setKeyEntry(String alias, Key key, char[] password, Certificate[] chain)
setCertificateEntry(String alias, Certificate cert)
Sauvegarde par store(OutputStream stream, char[] password)

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 43

javax.net.ssl.KeyManager (SSL)
Ce sont des gestionnaires de cls SSL
Ils grent des paires certificat-cl prive d'un type particulier
Seul type disponible en standard est X509

Doivent implanter l'interface (vide) KeyManager


Utilis dans le Handshake pour l'authentification
chooseServerAlias() et chooseClientAlias()
Trouver un alias qui restectent des contraintes d'algos (RSA, DSA...)
Une fois un alias satisfaisant trouv
getPrivateKey() et getCertificate()

Ils sont crs part des fabriques


KeyManagerFactory.getInstance("SunX509").getKeyManagers()
Retourne 1 KeyManager par type de cl (1 seul: X509KeyManager)
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 44

javax.net.ssl.TrustManager (SSL)
Ce sont les gestionnaires de certificats de confiance d'SSL
Ils grent des certificats de confiance d'un type particulier
Seul type disponible en standard est X509

Doivent implanter l'interface (vide) TrustManager


Utilis dans le Handshake pour validit de date, de signature, etc.
checkServerTrusted() et checkClientTrusted() vrifient les chanes de
certificats
getAcceptedIssuers() pour dterminer les metteurs de certificats
accepts

Ils sont crs part des fabriques


TrustManagerFactory.getInstance("SunX509").getTrustManagers()
Retourne 1 TrustManager par type de cl (1 seul: X509TrustManager)
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 45

Les fabriques de socket SSL


Fabriques de socket cliente SSL
SSLSocketFactory sf =
(SSLSocketFactory) SSLSocketFactory.getDefault();
Utilisation pour crer une socket et la connecter au port (SSL par
dfaut) 443 du serveur "machine":
SSLSocket socket =
(SSLSocket) sf.createSocket("machine",443)

Fabriques de socket serveur SSL


SSLServerSocketFactory ssf =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault()
Utilisation pour crer une SSLServerSocket (sur le port 4321):
SSLServerSocket ss =
(SSLServerSocket) ssf.createServerSocket(4321)
getSupportedCipherSuite() [possible] et getDefaultCipherSuite() [utilis]
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 46

Exemple Simple Serveur


import java.io.*;
import javax.net.ssl.*;
// ...
int port = serverPortNumber;
SSLServerSocketFactory sslSrvFact =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket s =
(SSLServerSocket)sslSrvFact.createServerSocket(port);
SSLSocket c = (SSLSocket)s.accept();
OutputStream out = c.getOutputStream();
InputStream in = c.getInputStream();
// Send messages to the client through
// the OutputStream
// Receive messages from the client
// through the InputStream
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 47

Exemple Simple Client


import java.io.*;
import javax.net.ssl.*;
// ...
int port = serverPortNumber;
String host = "hostname";
SSLSocketFactory sslFact =
(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket s =
(SSLSocket)sslFact.createSocket(host, port);
OutputStream out = s.getOutputStream();
InputStream in = s.getInputStream();
//
//
//
//

Send messages to the server through


the OutputStream
Receive messages from the server
through the InputStream

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 48

SSLSocket et SSLServerSocket
Par hritage, elles disposent des mthodes des Sockets et
ServerSockets
Elles ajoutent des mthodes propres la gestion fine du protocole

SSLSocket
startHandshake()
Par dfaut, appel initialement par le client avant tout change. Cet appel,
implicite ou explicite, est synchrone (bloquant)
Ensuite, peut tre appel nouveau pour rengocier. Alors asynchrone
Possibilit, dans ce cas, d'tre prvenu de manire asynchrone
addHandshakeCompletedListener(HandshakeCompletedListener listener)

SSLServerSocket
Pour demander l'authentification du client (ce n'est pas le cas par
dfaut), appeler setWantClientAuth(true) avant l'appel accept().
Pour l'exiger, appeler setNeedClientAuth(true)
getWantClientAuth() et getNeedClientAuth() pour connatre la config.
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 49

SSLEngine
Accs ventuellement non bloquant aux ressources sur
une connexion SSL, mais:
Protocole SSL complexe
Problmes d'interoprabilit avec les selecteurs
Volont de ne pas fixer de choix dans les providers

D'o:
Implmentation indpendante du modle d'entres/sortie et
du modle de thread
Doit tre gr par l'application
Pas trs facile manipuler

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 50

SSLEngine (schma)

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 51

SSLEngine (tats)
Un SSLEngine doit grer simultanment les donnes de
l'application et les donnes du Handshake
Il peut tre, tout moment, dans l'un des 5 tats:
Creation : prt tre configur
Initial handshaking : en cours d'authentification et de ngociation des
paramtres de communication
Application data : prt changer des donnes de l'application
Rehandshaking : en cours de rengociation des paramtres de
communication. Les donnes de handshake peuvent tre mlanges
aux donnes de l'application
Closure : prt fermer la connection.
Reprsent par SSLEngineResult et SSLEngineResult.HandshakeStatus
Sur les donnes envoyer: wrap(), sur les donnes reues unwrap()
Permet de dmultiplexer les donnes Application et Handshake
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 52

Ngotiation SSL
Par dfaut, en SSL, c'est le serveur qui attend les
messages Hello
On peut changer cet tat, sur SSLSocket comme sur
SSLServerSocket grce la mthode setUseClientMode()
Il est ensuite possible de demander l'authentification de
l'interlocuteur (setWant..., setNeed... )

Il est possible de paramtrer les versions du protocole


et les suites d'algorithmes utiliser
Spcifier avec setEnabledProtocols() et
setEnabledCipherSuites() des sous-ensembles de
getSupportedProtocols() et de getSupportedCipherSuites()

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 53

Sessions SSL
Une session est associe chaque connexion
1 mme session peut tre partage par plusieurs connexions
Par dfaut, s'il n'exsite pas de session associe une demande de
connexion, une nouvelle est cre.
Consultation/modification par get/setEnableSessionCreate()

Sur l'objet SSLSocket, getSession() retourne la SSLSession associe.


Il est alors possible de consulter
getId(): identificateur sous la forme de tableau d'octets
getProtocol() et getCipherSuite(): version du protocole et algorithmes
cryptographiques utiliss pour cette session
getPeerHost() et getPeerCertificates(): le nom et les certificats (ventuels)
de l'interlocuteur associ cette session
getLocalCertificates(): certificats (ventuels) envoys l'interlocuteur pour
s'authentifier
getCreationTime() et getLastAccessedTime(): cration et dernier accs
invalidate(): interdit la rutilisation d'une session. Par dfaut, rutilisation.
Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 54

HttpsURLConnection
Hrite de HttpURLConnection
La fabrique de socket SSL utiliser peut tre spcifie
Globalement: setDefaultSSLSocketFactory()
Pour la connexion: setSSLSocketFactory()

HTTPS impose de comparer le nom DNS et le CN du DN


S'ils ne concordent pas, il est possible d'utiliser un HostnameVerifier
Interface avec une unique mthode
boolean verify(String hostname,SSLSession session)

Puis l'enregistrer auprs du gestionnaire de connexion


Globalement : setDefaultHostnameVerifier(hv)
Pour la connexion : setHostnameVerifier(hv)

Etienne Duris Universit de Marne-la-Valle Mars 2005

Page 55

You might also like