SSL - kns7.org, Le Site

Transcription

SSL - kns7.org, Le Site
Protocole SSL
Application avec stunnel
SSL
Secure Socket Layer
R. Kobylanski
[email protected]
FC INPG
janvier 2005 - version 1.1
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
1
Protocole SSL
2
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL/TLS
Encapsule des protocoles non sécurisés (HTTP IMAP ...) dans une
couche chiffrée
Authentifie les correspondants avec des certificats
les serveur est toujours authentifié, optionnellement le client
Contrôle l’intégrité des transferts
Totalement transparent dans le protocole encapsulé
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL/TLS – Historique
SSLv1 juillet 1994 par Netscape
SSLv2 décembre 1994 intégré dans Netscape Navigator
SSLv3 novembre 1995
TLS (RFC 2246) à base de SSLv3 , pb de compatibilité
La notation SSL/TLS désigne le protocole TLS avec possibilité de
repli transparent sur SSLv3 en cas de problème
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL – Ports
Les versions sécurisées des protocoles utilisent un nouveau numéro
de port
HTTP
LDAP
IMAP
POP3
SMTP
TELNET
NNTP
IRC
FTP
FTP-data
80
389
143
110
25
23
119
194
21
20
R. Kobylanski
HTTPS
LDAPS
IMAPS
POP3S
SSMTP
TELNETS
NNTPS
IRCS
FPS
FPS-data
SSL
443
636
993
995
465
992
563
994
990
989
Protocole SSL
Application avec stunnel
startTLS
startTLS est une commande utilisée par des protocoles non
nativement SSL pour basculer dans un mode SSL
Cela évite d’utiliser deux ports différents pour des communications
chiffrées ou non.
La standardisation va dans ce sens, le port 465 (ssmtp) n’est plus
dans la liste des ports fournie par l’iana (voir RFC2487)
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Modes de fonctionnement
confidentialité des échanges Le serveur posséde un certificat qui
n’est pas vérifiable par le client (certifcat autosigné
ou CA inconnue)
La communication peut néanmoins être chiffrée
authentification du serveur Seul le serveur posséde un certificat
dont la signature est vérifiable par le client
La communication est alors chiffrée et le serveur
authentifié
authentification mutuelle Le serveur et le client posssèdent chacun
un certificat
La communication est chiffrée et les deux parties
peuvent s’authentifier mutuellement
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL – Protocole
Une première phase (Handshake) permet aux deux parties
de négocier les algorithmes et les longueur de clé
de s’authentifier
d’établir une première clé de session,
qui sera renouvellée au cours des échanges
de définir un identificateur de session associé aux paramètres
Cet identificateur (SessionId) peut servir à rétablir une session,
alors que la connexion tcp a été rompue.
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL – Handshake
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
SSL – Session
En cas de rupture d’un comminication TCP
Le client envoie un « Client Hello » en utilisant le SessionId
Le serveur cherche dans son cache de sessions cet
identificateur
et retourne un « Server Hello » avec le même id et restaure les
paramètres de la session
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Protocole – Exemple
openssl
romain@houat:~ openssl s_client -connect www.tbs-internet.com:443
...
Certificate chain
s:/C=FR/ST=Calvados/L=Caen/O=DONNIO Jean-Philippe/
OU=TBS-internet/CN=www.TBS-internet.com
i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/
OU=Certification Services Division/CN=Thawte Server CA/
[email protected]
--Server certificate
-----BEGIN CERTIFICATE----MIIC5zCCAlCgAwIBAgIDCCdYMA0GCSqGSIb3DQEBBAUAMIHEMQswCQYDVQQGEwJa
...
xUFlWeJuB4x+kX9KcMSLapQ+NLU27uINxcIa
-----END CERTIFICATE------No client certificate CA names sent
---
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Protocole – Exemple
openssl
--SSL handshake has read 1303 bytes and written 314 bytes
--New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 1024 bit
SSL-Session:
Protocol : TLSv1
Cipher
: EDH-RSA-DES-CBC3-SHA
Session-ID: B2F977E3B28EB0B237C268E361335FD2C47499B44631B462
Session-ID-ctx:
Master-Key: E6BF0C644F159D9D93FFBA1081A5B4270DDAD382F822002976D5F
Key-Arg
: None
Start Time: 1042659843
Timeout
: 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Stunnel
Stunnel permet de créer des tunnels ssl vers des serveurs
n’utilisant pas naturellement le chiffrement.
Stunnel est utilisé
aussi bien avec des serveurs lancés via inetd (pop imap ...)
que des serveurs autonomes (smtp http ...)
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
principe
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
stunnel
Utilisation de l’IGC pour créer des certificats
Utilisation de stunnel4
Authentification
1
2
3
pas d’authentification
authentification du serveur
authentification mutuelle
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Communication en clair
Utilisation de netcat pour simuler une communication non
chiffrée
Écrire un script qui simule le serveur
comportement du serveur
while true
do
nc -l -p 1234
done
et activer le script
Client
client
nc serveur 1234
Effectuer des échanges
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Création des certicats
Utiliser l’IGC pour créer un certificat
de type serveur pour le serveur
de type utilisateur pour le client
Il est possible de supprimer la protection des clés privées par un
mot de passe afin de faciliter le démarrage automatique du tunnel.
Est-ce souhaitable ?
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Tunnel sans authentification – Serveur
Récupérer les clés et certificat du serveur depuis l’IGC
stunnel-serveur.cnf
cert = stunnel-serveur.crt
key = stunnel-serveur.key
pid = /tmp/stunnel-serveur.pid
debug = 7
foreground = yes
output = stunnel-serveur.log
[test]
accept = 1234
connect = 2345
stunnel4
/usr/sbin/stunnel4 stunnel-serveur.cnf
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Tunnel sans authentification – Client
stunnel-client.cnf
client = yes
pid = /tmp/stunnel-client.pid
debug = 7
foreground = yes
output = stunnel-client.log
[test]
accept = 9876
connect = server:1234
stunnel4
/usr/sbin/stunnel4 stunnel-client.cnf
client
nc localhost 9876
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Tunnel sans authentification – diagnostic
Protocole SSL
Observation des logs (stunnel-client.log
stunnel-serveur.log)
Analyse du protocole (ssldump)
Utilser openssl s_client à la place du client stunnel
Traffic
Analyse de trame ((t)ethereal)
capturer le traffic en clair et le traffic chiffré associé
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Authentification du serveur – Client
Récupérer la chaîne de certification sur le client
stunnel-client.cnf
client = yes
pid = /tmp/stunnel-client.pid
debug = 7
foreground = yes
output = stunnel-client.log
verify = 2
CApath = ca
[test]
accept = 9876
connect = server:1234
client
nc localhost 1234
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Authentification mutuelle – Serveur
Récupérer la chaîne de certification sur le serveur
stunnel-serveur.cnf
cert = stunnel-serveur.crt
key = stunnel-serveur.key
pid = /tmp/stunnel-serveur.pid
debug = 7
foreground = yes
output = stunnel-serveur.log
verify = 2
CApath = ca
[test]
accept = 1234
connect = 2345
R. Kobylanski
SSL
Protocole SSL
Application avec stunnel
Mise en place d’un tunnel
Tunnel sans authentification
Authentification du serveur
Authentification mutuelle
Authentification mutuelle – Client
Récupérer les clés et certificats du client depuis l’IGC
stunnel-client.cnf
cert = stunnel-client.crt
key = stunnel-client.key
client = yes
pid = /tmp/stunnel-client.pid
debug = 7
foreground = yes
output = stunnel-client.log
verify = 2
CApath = ca
[test]
accept = 9876
connect = server:1234
R. Kobylanski
SSL