Programmation Réseau SSH et TLS (aka SSL)



Documents pareils
Accéder à PostgreSQL par JDBC via un tunnel SSL Java

TP 2 : Chiffrement par blocs

Le protocole SSH (Secure Shell)

Protocole SSH-2.0. Tuan-Tu, TRAN. Janvier 2009

SSH, le shell sécurisé

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Tunnels. Plan. Pourquoi? Comment? Qu est-ce? Quelles solutions? Tunnels applicatifs ESIL INFO 2005/2006. Sophie Nicoud

SSL ET IPSEC. Licence Pro ATC Amel Guetat

Richard MONTBEYRE Master 2 Professionnel Droit de l Internet Administration Entreprises. La banque en ligne et le protocole TLS : exemple

Sécurité des réseaux IPSec

Sommaire Introduction Les bases de la cryptographie Introduction aux concepts d infrastructure à clés publiques Conclusions Références

Devoir Surveillé de Sécurité des Réseaux

Cours 14. Crypto. 2004, Marc-André Léger

Table des matières Hakim Benameurlaine 1

Université de Reims Champagne Ardenne. HTTPS, SSL, SSH, IPSEC et SOCKS. Présenté par : BOUAMAMA Mohamed Nadjib AZIZ Xerin

Le protocole sécurisé SSL

Certificats (électroniques) : Pourquoi? Comment? CA CNRS-Test et CNRS

SSL. Secure Socket Layer. R. Kobylanski janvier version 1.1 FC INPG. Protocole SSL Application avec stunnel

Le Modèle de Sécurité dans JAVA

Tunnels et VPN. 22/01/2009 Formation Permanente Paris6 86

Manuel des logiciels de transferts de fichiers File Delivery Services

EMV, S.E.T et 3D Secure

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

SSL/TLS: Secure Socket Layer/Transport Layer Secure Quelques éléments d analyse. GRES 2006 Bordeaux 12 Mai Ahmed Serhrouchni ENST-PARIS CNRS

Sécurité WebSphere MQ V 5.3

Protocole industriels de sécurité. S. Natkin Décembre 2000

Installation et mise en œuvre de OpenSSH sous AIX 5L

titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

Les Protocoles de sécurité dans les réseaux WiFi. Ihsane MOUTAIB & Lamia ELOFIR FM05

Action Spécifique Sécurité du CNRS 15 mai 2002

La sécurité dans les grilles

TP Sur SSH. I. Introduction à SSH. I.1. Putty

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

«La Sécurité des Transactions et des Echanges Electroniques»

Réseaux Privés Virtuels

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Java Licence Professionnelle CISII,

Derrière toi Une machine virtuelle!

Chapitre 7. Sécurité des réseaux. Services, attaques et mécanismes cryptographiques. Hdhili M.H. Cours Administration et sécurité des réseaux

I.1. Chiffrement I.1.1 Chiffrement symétrique I.1.2 Chiffrement asymétrique I.2 La signature numérique I.2.1 Les fonctions de hachage I.2.

Windows Server 2008 Sécurité ADMINISTRATION ET CONFIGURATION DE LA SECURITE OLIVIER D.

SSH et compagnie : sftp, scp et ssh-agent

Programmation Internet en Java

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Corrigé des exercices sur les références

Les applications Internet

Projet de programmation (IK3) : TP n 1 Correction

OpenSSH. Présentation pour le groupe SUR (Sécurité Unix et Réseaux) 08/03/2005. Saâd Kadhi

Flux de données Lecture/Ecriture Fichiers

La citadelle électronique séminaire du 14 mars 2002

Serveur de sauvegarde à moindre coût

Dis papa, c est quoi un bus logiciel réparti?

La sécurité avec SSH. Atelier cctld Dakar, Sénégal. Hervey Allen

Remote Method Invocation (RMI)

Routeur Chiffrant Navista Version Et le protocole de chiffrement du Réseau Privé Virtuel Navista Tunneling System - NTS Version 3.1.

Du 03 au 07 Février 2014 Tunis (Tunisie)

TP réseaux Translation d adresse, firewalls, zonage

DISTANT ACESS. Emna TRABELSI (RT3) Chourouk CHAOUCH (RT3) Rabab AMMAR (RT3) Rania BEN MANSOUR (RT3) Mouafek BOUZIDI (RT3)

Programmer en JAVA. par Tama

FORMATION SUR «CRYPTOGRAPHIE APPLIQUEE

NOUVELLES TECHNOLOGIES RESEAUX SSH SSL TLS

FTPS AVEC UNE APPLIANCE FAST360 EN COUPURE. Table des matières

Bon ben voilà c est fait!

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Auto-évaluation Programmation en Java

I. Linux/Unix/UnixLike

Les Réseaux Privés Virtuels (VPN) Définition d'un VPN

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cisco Certified Network Associate

Journées MATHRICE "Dijon-Besançon" DIJON mars Projet MySafeKey Authentification par clé USB

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Introduction. Adresses

Serveur FTP. 20 décembre. Windows Server 2008R2

Aurélien Bordes. OSSIR 13 juillet 2010

Programmation système de commandes en C

Mieux comprendre les certificats SSL THAWTE EST L UN DES PRINCIPAUX FOURNISSEURS DE CERTIFICATS SSL DANS LE MONDE

Programmation client-serveur sockets - RPC

Le format OpenPGP. Traduit par : Sébastien Person. personseb@yahoo.fr. Matthieu Hautreux. matthieu.hautreux@insa-rouen.fr.

SSH. Romain Vimont. 7 juin Ubuntu-Party

Livre blanc. Sécuriser les échanges

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

RMI le langage Java XII-1 JMF

Accès aux ressources informatiques de l ENSEEIHT à distance

Cryptologie. Algorithmes à clé publique. Jean-Marc Robert. Génie logiciel et des TI

Les certificats numériques

PROGRAMMATION PAR OBJETS

Le prototype de la fonction main()

Transport Layer Security (TLS) Guide de mise en œuvre. Version: 1.0

Plan Général Prévisionnel (1/2) Internet et Outils L1/IO François Armand. Plan Général Prévisionnel (2/2) Unix, Réseau: Plan

Lier Erlang avec d autres langages de programmation

3IS - Système d'exploitation linux - Programmation système

OS Réseaux et Programmation Système - C5

INSTALLATION D'OPENVPN:

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

Services Réseaux - Couche Application. TODARO Cédric

Transcription:

Programmation Réseau SSH et TLS (aka SSL) Jean-Baptiste.Yunes@liafa.jussieu.fr Coloriages: François Armand armand@informatique.univ-paris-diderot.fr UFR Informatique 2011-2012

Réseau et Sécurité Problèmes principaux: Authentification Confidentialité Intégrité

Réseau et Sécurité Authentification: S assurer que la personne (le programme, l information) est bien ce qu elle «prétend» être Éviter les imposteurs, attaques de type «man in the middle»

Réseau et Sécurité Confidentialité: Ne pas dévoiler des informations sans autorisation Donc empêcher Utilisateur non autorisé d'accéder à une information à laquelle il ne devrait pas avoir accès, Utilisateur autorisé de transmettre une information à un tiers non autorisé

Réseau et Sécurité Intégrité: Absence d'altérations incorrectes de l'état du système Empêcher les modifications illégitimes Par des utilisateurs non autorisés Ou par des utilisateurs autorisés Empêcher qu'on puisse empêcher les modifications légitimes

Cryptage Du point de vue des communications, la confidentialité se base sur le cryptage / chiffrement des informations Cryptage avant envoi Transfert Décryptage à la réception Problème: comment crypter / décrypter de manière cohérente 6

Cryptage Symétrique: La clé de chiffrement / déchiffrement est identique MsgCrypté = f crypt (Msg, clé) Msg = f decrypt (MsgCrypté, clé) Problème: Il faut échanger de manière sûre la clé entre émetteur et récepteur. 7

Cryptage Asymétrique: Chaque «partie» une clé (privée/publique) Un message codé avec une des clés ne peut-être décodé qu avec l autre clé. MsgCrypté = f crypt (Msg, clé publique ) Msg = f decrypt (MsgCrypté, clé privée ) Ou MsgCrypté = f crypt (Msg, clé privée ) Msg = f decrypt (MsgCrypté, clé publique ) 8

Cryptage Problème: Les mécanismes asymétriques sont beaucoup plus «onéreux» que les mécanismes symétriques. Idée: Utiliser le chiffrement asymétrique pour transmettre un clé de chiffrement symétrique Le coût n est subit qu une fois lors de l initialisation de la communication chiffrée Le coût n est pas subit lors de chaque échange. 9

Commandes Communications entre machines telnet, rsh, rlogin, rcp, ftp Remplacées par: ssh scp sftp 10

ssh ssh: Suppose l existence d un «démon» (sshd) sur la machine à laquelle on veut se connecter port 22 par défaut Syntaxe: ssh user@hostname Nombreuses options, port forwarding, X11 forward 11

ssh Envoi d une demande de connexion en clair au serveur Le serveur génère une paire de clés (chiffrage asymétrique) Envoi de la clé publique au client Le client génère une clé de chiffrage symétrique Envoi de la clé symétrique cryptée avec la clé publique reçue. Échanges Confidentialité: cryptés par la clé «symétrique» Intégrité: checksum/signatures (md5, sha1 ) 12

ssh Authentification de l utilisateur par clés (optionnel) Un utilisateur génère une paire de clés sur sa machine ssh-keygen t dsa Ou rsa (ssh V1) 13

ssh Authentification de l utilisateur par clés (optionnel) Transfert de la clé publique sur le serveur auquel on voudra se connecter: ssh-copyid user@hostname Ensuite, lors d un connexion par ssh Plus besoin de rentrer un mot de passe On peut protéger le stockage des cles par une passphrasse 14

rsync rsync permet de «copier» une arborescence de fichiers d un machine A vers une machine B La commande peut-elle-même être exécutée depuis A, B ou même C! Transfert «intelligent» Transfert «réduit» aux modifications depuis la dernière copie (via rsync). Exemple: rsync toto francois@lucien:/home/francois/exo 15

rsync rsync peut utiliser ssh comme couche de transport rsync --rsh=ssh toto francois@lucien:/tmp/exo TCP en se connectant à un démon rsync rsync toto francois@lucien::/tmp/exo 16

TLS TLS (aka SSL) Transport Layer Security (aka Secure Socket Layer) est une couche intermédiaire entre les couches Transport et Application de la pile Internet et joue un rôle équivalent à la couche Session du modèle OSI elle fournit des services de sécurité suivant : authentification confidentialité Intégrité SSH n utilise pas SSL. Protocoles similaires mais différents 17

TLS D autre part elle possède deux caractéristiques intéressantes : la transparence (les protocoles applicatifs ne sont pas modifiés) la spontanéité (établissement à partir de zéro d un certain niveau de sécurité, i.e. pas de configuration a-priori) la première normalisation correspondante est la RFC 2246 (01/1999) il en existe une version «paquet», DTLS normalisée dans RFC 4347 18

L idée est d utiliser un système de cryptographie asymétrique (type RSA) pour établir une liaison sûre utilisant de la cryptographie symétrique (type DES) la cryptographie asymétrique est utilisée pour échanger la clef de cryptage de la communication En général une authentification est aussi réalisée pour s assurer que le serveur est bien qui il affirme être 19

pour le serveur il faut une paire de clefs cryptographiques (une privée, une publique) ces clefs seront stockées dans une armoire à clefs (keystore), cette armoire étant elle-même protégée par un mot de passe keytool -genkey -alias nomclef -keyalg RSA -keystore armoire.jks [-storepass mpd] 20

pour le client il faut une armoire de clefs contenant le certificat correspondant à la clef publique du serveur extraire le certificat de l armoire du serveur keytool -export -alias nomclef -keystore armoire.jks [-storepass mdp] -file certificat.cert 21

importer le certificat dans l armoire du client, tout en le reconnaissant comme certificat acceptable keytool -importcert -trustcacerts -alias nomclef -file certificat.cer -keystore armoireclient.jks [-storepass mdp] 22

Côté serveur la création de la socket s effectue par ServerSocketFactory ssocketfactory = SSLServerSocketFactory.getDefault(); ServerSocket ssocket = ssocketfactory.createserversocket(port); 23

Côté client la création de la socket s effectue par SocketFactory socketfactory = SSLSocketFactory.getDefault(); Socket socket = socketfactory.createsocket(hostname,port); 24

Attention les instructions précédentes ne permettent pas d obtenir la spontanéité l authentification du client (double authentification) Elles ne doivent pas être utilisées pour établir une liaison «commerciale» le certificat est auto-signé (pas de sens du point de vue de la sécurité et sensibilité à des attaques) 25

Exemple: serveur + import...; public class Serveur { public static void main(string []args) { try { int port = 4433; ServerSocketFactory ssocketfactory SSLServerSocketFactory.getDefault(); ServerSocket ssocket = ssocketfactory.createserversocket(port); Socket socket = ssocket.accept(); InputStream in = socket.getinputstream(); OutputStream out = socket.getoutputstream(); int b = in.read(); System.out.println("Read : "+(byte)b); out.write(b+1); in.close(); out.close(); catch(ioexception e) {System.out.println(e); 26

Exemple : client + import...; public class Client { public static void main(string [] args) { try { int port = 4433; String hostname = "localhost"; SocketFactory socketfactory = SSLSocketFactory.getDefault(); Socket socket = socketfactory.createsocket(hostname, port); InputStream in = socket.getinputstream(); OutputStream out=socket.getoutputstream(); int b = 111; out.write(b); System.out.println("Read : "+in.read()); in.close(); out.close(); catch(ioexception e) {System.out.println(e); 27

Exemple : keystores Dans le répertoire du serveur: keytool -genkey -keystore demo.ks keytool -export file demo.cer -keystore demo.ks Dans le répertoire du client keytool -import -file demo.cer -keystore clientdemo.ks 28

Exemple : exécution Côté serveur: java -Djavax.net.ssl.keyStore=demo.ks -Djavax.net.ssl.keyStorePassword=123456 Serveur Côté client: java -Djavax.net.ssl.trustStore= clientdemo.ks -Djavax/net/ssl/trustStorePassword=123456 Client 29

Client sans utilisation de keystore public class ClientSpontaneous { public static void main(string [] args) { try { int p = 4433; String h = "127.0.0.1"; SSLContext context = SSLContext.getInstance("TLS"); SavingTrustManager tm = new SavingTrustManager(); context.init(null, new TrustManager[]{tm, null); SocketFactory sfactory = context.getsocketfactory(); //SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket)(sFactory.createSocket(h, p)); InputStream in = socket.getinputstream(); OutputStream out = socket.getoutputstream(); int b = 111; out.write(b); System.out.println("Read : "+in.read()); in.close(); out.close(); catch(exception e) {e.printstacktrace(); 30

Client sans utilisation de keystore class SavingTrustManager implements X509TrustManager { public X509Certificate[] getacceptedissuers() { throw new UnsupportedOperationException(); public void checkclienttrusted(x509certificate[] chain, String authtype) throws CertificateException { throw new UnsupportedOperationException(); public void checkservertrusted(x509certificate[] chain, String authtype) throws CertificateException { for (int i=0; i<chain.length; i++) { System.out.println(chain[i]); 31

SSL en C Il existe différentes implémentations OpenSSL http://www.openssl.org/ 1.0.1 du 14/03/2012 Supporte les différentes versions du protocole (ssl v1, v2, v3, tls v1) Crypto: AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89 Hash: MD5, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94 Public key: RSA, DSA, Diffie Hellman key exchange, Elliptic curve, GOST R 34.10-2001 32

SSL en C voir https://thunked.org/programming/openssl-tutorial-client-t11.html #include <openssl/bio.h> #include <openssl/ssl.h> #include <openssl/err.h> #include <stdio.h> int main(int argc, char** argv) { CRYPTO_malloc_init(); // Initialize for OpenSSL's use SSL_library_init(); // Initialize OpenSSL's libraries SSL_load_error_strings(); // Load SSL error strings ERR_load_BIO_strings(); // Load BIO error strings // Load all available encryption algorithms OpenSSL_add_all_algorithms(); // The real work openssltest(); return 0; 33

SSL en C Client sans utilisation de connexion sécurisée void openssltest() { BIO* bio = BIO_new_connect("google.com:80"); if (bio == NULL) { ERR_print_errors_fp(stderr); return; if (BIO_do_connect(bio) <= 0) {return; char buf[1024]; char send[1024]; memset(buf, 0, sizeof(buf)); memset(send, 0, sizeof(send)); strcat(send, "GET / HTTP/1.1\nHost:google.com\nUser Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\nConnection: Close\n\n"); BIO_puts(bio, send); // A suivre 34

SSL en C Client sans utilisation de connexion sécurisée // Loop while there's information to be read. while (1) { int x = BIO_read(bio, buf, sizeof(buf) - 1); if (x == 0) { break; else if (x < 0) { if (!BIO_should_retry(bio)) { BIO_free_all(bio); return; else { buf[x] = 0; // Echo what the server sent to the screen printf("%s", buf); BIO_free_all(bio); // Return. return; 35

SSL en C Client avec utilisation de connexion sécurisée void openssltest() { SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method()); SSL* ssl; BIO* bio = BIO_new_ssl_connect(ctx); if (bio == NULL) { ERR_print_errors_fp(stderr); SSL_CTX_free(ctx); return; BIO_get_ssl(bio, &ssl); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); BIO_set_conn_hostname(bio, "www.google.com:https"); if (BIO_do_connect(bio) <= 0) { BIO_free_all(bio); SSL_CTX_free(ctx); return; 36

SSL en C Client avec utilisation de connexion sécurisée if (BIO_do_handshake(bio) <= 0) { printf("failed to do SSL handshake!"); BIO_free_all(bio); SSL_CTX_free(ctx); return; // Ensuite même séquence d émission réception que // dans le cas non sécurisé. // Ne pas oublier SSL_CTX_free(ctx); // dans les cas d erreur 37