• Aucun résultat trouvé

Cette section contient l’ossature d’une implémentation TLS-SIGN basée sur OpenSSL [OpenSSL]. OpenSSL est actuellement l’API la plus utilisée. Elle est du domaine public et les sources sont donc disponibles.

Dans les deux figures qui suivent, nous donnons notre méthode d’intégration de SSL_SIGN dans OpenSSL sous forme de deux fonctions SSL_sign_write et SSL_sign_read qui ressemblent au deux fonctions SSL_read et SSL_write utilisées par SSL/TLS.

Fd = socket( …) Bind(fd) Connect(fd) SSL_library_init() meth=[SSL|v2|v23|v3] | TLSv1]_client_method Ctx=SSL_set_cipher_list(ctx,cipher) SSL_CTX_load_verify_locations(ctx, CA_FILE,0) SSL_CTX_set_verify(ctx,SSL_VEIFY_PEER, NULL) Ssl=SSL_new(ctx) SSL_set_fd(ssl,fd) SSL_connect()

SSL_write | SSL_read | SSL_sign_write | SSL_sign_read | SSL_audit SSL_shutdown(ssl)

Close(fd)

SSL_free(ssl) SSL_CTX_free(ctx)

Figure 5-10. Exemple d’une application SSL/TLS coté client

Fd = socket(…) Bind(fd) Listen(fd) SSL_library_init() meth=[SSL|v2|v23|v3] | TLSv1]_client_method Ctx = SSL_CTX_new(meth) SSL_CTX_set_cipher_list(ctx, cipher) SSL_CTX_use_certificate_file(ctx,cert_file_type) SSL_CTX_set_default_pqsswd_cb_userdata(ctx,pqssword) SSL_CTX_use_PrivateKey_file(ctx,filename,filetype) SSL_CTX_check_PrivateKey(ctx) Accept(fd) Fork() or thread_create() ssl = SSL_new(ctx) SSL_set_fd(ssl,newfd) SSL_accept(ssl)

SSL_write | SSL_read | SSL_sign_write | SSL_sign_read | SSL_audit Close(newfd)

SSL_free(ssl)

SSL_CTX_free(ctx) Close(fd)

Figure 5-11. Exemple d’une application SSL/TLS coté serveur

L’établissement d’un canal sécurisé avec SSL/TLS implique les étapes suivantes :

1. Etablissement d’une connection TCP avec le serveur qui implique un message aller- retour si aucune erreur ne se produit.

SSL/TLS Record protocol -verify -audit -sign -audit Request Request Audit Log Audit Log SSL/TLS client SSL/TLS server LDAP (tiers de confiance)

Figure 5-12. L’implémentation de TLS-SIGN avec OpenSSL

2. Sur le canal TCP, le client et le serveur établissent une voie de transmission sécurisée SSL/TLS. L’application fait appel à la librairie SSL SSL_library_init() pour ouvrir premièrement une Socket SSL SSL_new(). SSL_new est équivalente à l’appel Socket() de TCP.

3. L’application utilise SSL_connect() pour établir une connexion SSL/TLS avec le serveur. Dans le Handshake de SSL/TLS, le client et le serveur négocient les algorithmes de chiffrement, de hachage et la méthode d’authentification en faisant appel à SSL_set_cipher_list(). Le client et le serveur utilisent un chiffrement à clé publique pour échanger les clés secrètes de session qui seront employées pour chiffrer et déchiffrer les messages de la couche application.

4. Sur le canal SSL/TLS, le client et le serveur peuvent échanger un ou plusieurs messages (message HTTP, FTP, etc.). Les applications utilisent pour cela les deux fonctions SSL_write(..) et SSL_read(..) à la place des appels au write() et read() de TCP.

5. Si le module de signature TLS-SIGN est activé, les applications doivent utiliser les deux fonctions SSL_sign_write(…) et SSL_sign_write(…) au lieu des appels SSL_write(..) et SSL_read(..). En plus, avec le module de signature une nouvelle fonction SSL_audit(…) doit être aussi activée afin de stocker les informations signées localement ou dans une base de données LDAP. Les deux fonctions SSL_sign_write() et SSL_sign-read() possèdent comme entrée les données à signer, sa longueur, le type de signature ainsi que le format de signature utilisé. Par exemple, les entrées de la fonction SSL_sign_write sont :

SSL_sign_write (“donnée à signer“, strlen(“donnée à signer”), “signature_with_double_proof”, “XML-DSIG”).

Pour la fonction SSL_audit(), elle prend comme entée respectivement les trois valeurs suivantes : l’URL de la base de données LDAP d’un tiers de confiance, l’URL de deux

fichiers log locaux (entrant et sortant) et SSL_audit( null, null, C:\ssl- sign\entrat\s_id1.log, c:\ssl_sign\sortant\s_id1.log). TLS-SIGN ... Cancel Server Name Log Files C:\ssl-sign\input\aliza\s_id1.log Signature Method C:\ssl-sign\output\aliza\s_id1.log Ldap:// https://aliza.enst.fr:5443 Add

Secure MIME Sign Data Add Library

Browse Browse Browse Signature Type

Signature_with_proof_of_receipt Add Library

OK

Figure 5-13. Interface de configuration de TLS-SIGN

6. Pour fermer la connexion, l’application peut utiliser les fonctions SSL_shutdown() et ssl_free().

5.7 Conclusion

Dans ce chapitre, nous avons présenté une architecture d’intégration d’un service de signature dans le protocole SSL/TLS dans le but de protéger les transactions Internet avec un service générique de non répudiation.

Contrairement à l’approche qui consiste à limiter le service de non répudiation aux applications, notre approche présente plusieurs avantages. Ces derniers concernent la protection à long terme des données et la génération des preuves génériques de non répudiation.

Il est à noter que nous avons implémenté un premier service TLS-SIGN en utilisant la bibliothèque de sécurité GNUTLS [GNUTLS] qui supporte le standard TLS Extensions. Dans le souci d’offrir des fonctionnalités encore plus performantes, nous visons d’ajouter à notre prototype les points suivants:

1. Afin de faciliter son déploiement, notre architecture devrait s’intégrer aux navigateurs Web tels que le navigateur Web de Mozilla.

2. Notre architecture doit être étendue afin de s’interfacer avec les certificats d'attribut. Avec le service TLS-SIGN, les certificats d'attribut seront employés dans le contrôle d’accès à travers des mécanismes de délégation de rôles et de signature.

Troisième Partie

SEP, un protocole de sécurité au niveau

d’échange :

Chapitre 6

6 Le protocole SEP (Secure and Extensible Protocol)