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