Le Modèle de Sécurité dans JAVA



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

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

Remote Method Invocation (RMI)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence professionnelle CISII,

Documentation CAS à destination des éditeurs

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TP1. Outils Java Eléments de correction

EJBCA PKI Open Source

Introduction au langage Java

Programmation Réseau SSH et TLS (aka SSL)

Programmation réseau avec Java. 3/7 RMI, un peu de sécurité et CORBA

Aspects techniques : guide d interfaçage SSO

Introduction à la sécurité Cours 8 Infrastructure de clés publiques. Catalin Dima

Web Tier : déploiement de servlets

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Politique de certification et procédures de l autorité de certification CNRS

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Corrigé des exercices sur les références

RMI le langage Java XII-1 JMF

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

Notes de cours Practical BigData

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

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Titre: Version: Dernière modification: Auteurs: Statut: Remplace: Licence:

Les architectures 3-tiers Partie I : les applications WEB

PROGRAMMATION PAR OBJETS

Plan du cours. Historique du langage Nouveautés de Java 7

Cours 1: Java et les objets

Paris Airports - Web API Airports Path finding

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

as Architecture des Systèmes d Information

Programmation Objet Java Correction

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Certificat Big Data - Master MAthématiques

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

La base de données XML exist. A. Belaïd

Fichiers d'archives java - *.jar

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Installation d'un TSE (Terminal Serveur Edition)

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

TP3 : Manipulation et implantation de systèmes de fichiers 1

BOUCHARD Nicolas. GENTILE Pierre

Programmation avancée et répartie en Java : interfaçage avec d autres langages

INSTALLATION ET CONFIGURATION DE OPENLDAP

Architectures PKI. Sébastien VARRETTE

7 Développement d une application de MapReduce

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Auto-évaluation Programmation en Java

Java Licence Professionnelle CISII,

Premiers Pas en Programmation Objet : les Classes et les Objets

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

OpenPaaS Le réseau social d'entreprise

Programmation Internet en Java

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

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

Sécurisez votre serveur Web Internet Information Services de Microsoft (MS IIS) avec un certificat numérique de thawte thawte thawte thawte thawte

Censio Tutorial Sharepoint Cloud Connector exporter les données d un fichier plat dans Sharepoint Online. Version 1.

Développement Logiciel

Programmer en JAVA. par Tama

Programmation Web. Madalina Croitoru IUT Montpellier

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Signature électronique. Romain Kolb 31/10/2008

COMMUNICATION TECHNIQUE N TCV060 Ed. 01. OmniVista 4760 Nb de pages : 18 Date : URGENTE NON URGENTE TEMPORAIRE DEFINITIVE

Gestion des certificats en Internet Explorer

Création d une application JEE

Public Key Infrastructure (PKI)

A. À propos des annuaires

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

SPECIFICATION ET DESCRIPTION DU MULTICAST FIABLE DANS ETOILE

TP1 : Initiation à Java et Eclipse

JavaServer Pages (JSP)

Java DataBaseConnectivity

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

OPTENET DCAgent Manuel d'utilisateur

TD3: tableaux avancées, première classe et chaînes

Sun Java System Access Manager Notes de version pour Microsoft Windows

Solutions du chapitre 4

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

TP Programmation Java / JDBC / Oracle

Gestion Electronique de Document (ECM/GED)

Une introduction à la technologie EJB (2/3)

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

et Active Directory Ajout, modification et suppression de comptes, extraction d adresses pour les listes de diffusion

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Desktop Intégration. Rémi Forax

Mysql avec EasyPhp. 1 er mars 2006

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Guide Numériser vers FTP

Application de lecture de carte SESAM-Vitale Jeebop

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Transcription:

Le Modèle de Sécurité dans JAVA $Id : javasecurity.lyx 1565 2008-10-22 13 :57 :30Z phil $ 22 octobre 2008 Université de Cergy-Pontoise, 2 rue A. Chauvin 95302 Cergy-Pontoise cedex e-mail laroque@u-cergy.fr Table des matières 1 Historique 2 1.1 La sécurité dans le JDK 1.0..................... 2 1.2 La sécurité dans le JDK 1.1..................... 2 1.3 La sécurité dans la J2XE....................... 3 2 Le contrôle des applets 4 2.1 Exemple simple............................ 4 2.1.1 Code source Java....................... 4 2.1.2 Code source HTML...................... 5 2.1.3 Fonctionnement par défaut.................. 6 2.2 Ajout d une ACL dans le policy tool................ 7 2.3 Contenu du policy file........................ 7 3 Le contrôle des applications 8 4 Les outils de gestion de la sécurité 9 4.1 Signatures électroniques....................... 9 4.2 Certificats............................... 9 4.3 Autorités de certification....................... 9 4.4 Stockage des clés (keystores)..................... 10 4.5 Outils et moyens techniques dans le JDK.............. 10 4.6 Mise en œuvre de la signature par les API du JDK........ 10 4.7 Mise en œuvre de la signature par les outils du JDK........ 11 1

5 Signature de code et permissions 11 5.1 Un exemple simple.......................... 11 5.2 Les étapes côté fournisseur...................... 12 5.3 Création du JAR et génération des clés............... 12 5.4 Signature du fichier JAR....................... 13 5.5 Exportation d un certificat...................... 13 5.6 Les étapes côté utilisateur...................... 13 5.7 Importation du certificat....................... 14 5.8 Création d une nouvelle ACL.................... 14 6 Echange de documents signés 14 6.1 Etapes côté émetteur......................... 15 6.2 Etapes côté destinataire....................... 15 1 Historique 1.1 La sécurité dans le JDK 1.0 Binaire : Tout code local a un accès non limité aux ressources Tout code distant est exclu de l accès à ces ressources, il tourne dans la sandbox 1.2 La sécurité dans le JDK 1.1 La notion d applet signée va sophistiquer le modèle Une applet signée a les mêmes droits que du code local 2

Elle est livrée dans un fichier archive JAR, avec la signature électronique Encore très binaire 1.3 La sécurité dans la J2XE Beaucoup plus sophistiqué : Tout code, local comme distant, est soumis à des règles d accessibilité. Ces règles sont regroupées dans un policy file. Des outils sont fournis pour constituer/ modifier ce fichier (policytool). Il contient des ACL (Access Control List). Chaque ACL définit l accessibilité à une (un groupe de) ressource(s) par un domaine (ensemble de classes). 3

2 Le contrôle des applets Le contrôle d accès est fait à l aide d un security manager. Si l accès est refusé, une exception est levée. Pour permettre l accès à la ressource à l applet, il faut modifier le policy file ou le security manager. La modification du policy file peut se faire à l aide du policy tool (commande policytool) : 2.1 Exemple simple On écrit une applet qui va tenter d écrire un (nouveau) fichier dans le répertoire home (donc côté client). 2.1.1 Code source Java Le code source de l applet a l allure suivante : // $Id: AppletSecurity.java 1565 2008-10-22 13:57:30Z phil $ package pl.security; 4

import java.awt.*; import java.io.*; import java.applet.*; /** * Test for java applet security. * This applet tries to write a local (client) file. Without ACL, a * SecurityException is thrown. With the correct ACL, the code executes * normally * @author laroque@u-cergy.fr * @version $Rev: 1565 $ */ public class AppletSecurity extends Applet { String myfile = "newfile"; File f = new File(myFile); DataOutputStream dos; public void init() { String osname = System.getProperty("os.name"); } } public void paint(graphics g) { try { dos = new DataOutputStream (new BufferedOutputStream(new FileOutputStream(myFile),128)); dos.writechars("the applet could write local FS\n"); dos.flush(); g.drawstring("successfully wrote to the file named " + myfile, 10, 10); } catch (SecurityException e) { g.drawstring("caught security exception: " + e, 10, 10); } catch (IOException ioe) { g.drawstring("caught i/o exception", 10, 10); } } 2.1.2 Code source HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> 5

<head> <meta content="text/html; charset=iso-8859-1" http-equiv="content-type"> <title>applet security test</title> </head> <body> Applet security test: <br> <applet code="pl.security.appletsecurity" archive="pl.jar" alt="if you see this, then the applet couldn t start" height=100 width=400 > This browser ignores "applet" tags </applet> </body> </html> 2.1.3 Fonctionnement par défaut Sans précaution particulière, le chargement de la page (soit dans l appletviewer lancé depuis le home directory, soit depuis un navigateur web) provoque comme on peut s y attendre une exception : Il va falloir autoriser ce code à écrire dans le FS local. Pour cela, on va définir une ACL. 6

2.2 Ajout d une ACL dans le policy tool Une ACL est constituée de trois paramètres : Le type de permission (E/S, propriétés systèmes, etc.) La ressource concernée (par exemple tel fichier/répertoire) Les droits donnés (par exemple lecture et/ou écriture) On indique dans le champ CodeBase l URL à laquelle on souhaite fournir un accès Il faut ensuite préciser le type de permission, le nom de la ressource concernée et le type d opération qu on autorise. Les permissions existantes sont regroupées dans la figure suivante : 2.3 Contenu du policy file Dans notre exemple, le fichier a l allure suivante : grant codebase "http ://depinfo.u-cergy.fr/~pl/pl.jar" { permission java.io.filepermission "/home/phil/newfile", "write" ; } ; Si ce fichier a été sauvé sous le nom ~/mypolicy, il faut indiquer au gestionnaire de sécurité (le security file, ~java/jre/lib/security/java.security, où ~java est le répertoire racine de JAVA) où il se trouve. On peut avoir plusieurs policy files. Chaque exemplaire doit faire l objet d une ligne de la forme suivante dans le fichier java.security : policy.url.1=file :${java.home}/lib/security/java.policy 7

policy.url.2=file :${user.home}/.java.policy policy.url.3=file :${user.home}/mypolicy Enfin, on peut indiquer directement sur la ligne de commande que l on désire exécuter l applet avec les ACL définies dans le fichier mypolicy : $ appletviewer -J-Djava.security.policy=~/myPolicy TheAppletURL.html Après ajout de l entrée précédente, on peut exécuter avec succès le code de l applet de notre exemple : 3 Le contrôle des applications La différence principale avec les applets est que, par défaut, aucun gestionnaire de sécurité n est actif pour les applications. On peut l activer explicitement : $ java -Djava.security.manager MonAppli Dans ce cas, l accès à certaines propriétés (par exemple user.home) est refusé. Les droits par défaut sont donnés dans le system policy file, ~java/jre/lib/security/java.policy. Dans le fichier /mypolicy précédent, il faut alors rajouter (par exemple) : grant codebase "file :${user.home}/src/java/-" { permission java.util.propertypermission "user.home", "read" ; permission java.util.propertypermission "java.home", "read" ; } ; 8

On peut également (à la place) spécifier explicitement le policy file à utiliser : $ java -Djava.security.manager \ -Djava.security.policy=mypolicy MonAppli N.B. : le - en fin d URL permet de donner les mêmes droits à toute l arborescence de répertoires dont la racine est spécifiée par l URL. 4 Les outils de gestion de la sécurité L utilisation intensive d Internet implique la nécessité d être certain de la provenance d un code (notamment applet) avant son utilisation locale. Les outils principaux permettant d effectuer cette vérification sont au nombre de trois : les signatures électroniques, les certificats et les keystores 4.1 Signatures électroniques Reposent sur des algorithmes a clés dissymétriques (publique / privée) On envoie sa clé publique à tous ses interlocuteurs On signe un document avec sa clé privée (qu on est seul à connaître!) Le destinataire utilise la clé publique pour vérifier que l on est bien l auteur du document (par confrontation avec la clé privée) Le problème est repoussé à être certain de la validité de la clé publique! C est là qu interviennent les certificats 4.2 Certificats Un certificat contient : La clé publique de l entité concernée. Le distinguished name de l entité concernée (le propriétaire, owner), i.e. son nom son organisation (et sa sous-organisation au sens LDAP) ses ville, état/province, pays et code postal Une signature électronique de l émetteur du certificat (issuer) qui en certifie la validité. Le distinguished name de l émetteur. On peut souvent vérifier la clé publique d une entité inconnue en vérifiant celle de son émetteur, et en remontant la chaîne jusqu à arriver à un émetteur auquel on fait confiance. 4.3 Autorités de certification Si cette vérification est impossible, on peut toujours créer une empreinte (fingerprint) du certificat, puis appeler l émetteur en lui demandant de lui envoyer 9

son certificat. En comparant les deux empreintes, il peut s assurer de la validité du premier... Un émetteur peut certifier lui-même sa signature (self-signed certificate), en le signant à l aide de sa clé privée. Bien entendud il doit être connu du destinataire comme fiable. Sinon, l authentification passe par un tiers de confiance (Certification Authority, CA) : l émetteur envoie un certificate signing request (CSR) auto-signé au CA, qui en vérifie la validité. Il émet alors un certificat concernant l émetteur qu il signe lui-même. Ainsi, toute personne qui fait confiance au CA fait confiance à l émetteur. Les CA sont organisés de manière arborescente. Le JDK fournit un certain nombre d outils pour la gestion des signatures et des certificats. 4.4 Stockage des clés (keystores) Dans des bases protégées par mot de passe. Deux types d information : Les certificats auxquels on fait confiance (trusted certificates) : les documents signés de la clé publique correspondante sont considérés comme authentiques. Des couples clé privée/certificat contenant la clé publique correspondante. Chaque entrée est repérée par un alias unique. 4.5 Outils et moyens techniques dans le JDK La constitution de signatures et de certificats peut être faite de plusieurs façons : A l aide d outils livrés avec la J2SE (et la J2EE) : jar, jarsigner, keytool A l aide d API incluses dans le JDK (sauf, pour l instant, pour la création de certificats) Par un mélange des deux techniques. Avant de pouvoir exécuter un code signé en local, il est nécessaire d avoir (ou d obtenir) un certificat validant cette signature, et de l incorporer dans son keystore. 4.6 Mise en œuvre de la signature par les API du JDK Ces classes permettent à l émetteur de générer des paires clé publique / clé privée ; générer une signature électronique pour un document, à partir de la clé privée ; joindre la signature (et la clé publique) aux données signées. 10

Elles permettent au destinataire de importer une clé publique dont il a besoin ; vérifier l authenticité d une signature. 4.7 Mise en œuvre de la signature par les outils du JDK Ces outils permettent à l émetteur de générer des paires clé publique / clé privée ; générer une signature électronique pour un document, à partir de la clé privée ; joindre la signature (et la clé publique) aux données signées. Ils permettent au destinataire de importer une clé publique dont il a besoin ; vérifier l authenticité d une signature. 5 Signature de code et permissions Tâches côté fournisseur du code : placer le code dans une archive JAR ; signer l archive ; exporter le certificat correspondant à la clé privée ayant signé l archive. Tâches côté utilisateur du code : vérifier que l application ne peut normalement pas accéder à une ressource donnée si elle s exécute sous la responsabilité d un security manager ; importer le certificat relatif au code utilisé dans son keystore ; modifier le policy file pour fournir l accès nécessaire au code authentifié par ce certificat ; vérifier que l application peut alors accéder à la ressource demandée. 5.1 Un exemple simple L exemple repose sur une classe Count qui donne le nombre de caractères d un fichier passé en paramètre : import java.io.* ; public class Count { public static void countchars(inputstream in) throws IOException { int count = 0 ; while (in.read()!= -1) count++ ; System.out.println("Counted " + count + " chars.") ; } 11

} public static void main(string[] args) throws Exception { if (args.length >= 1) countchars(new FileInputStream(args[0])) ; else System.err.println("Usage : Count filename") ; } 5.2 Les étapes côté fournisseur L émetteur prétend être Susan Georges. Les étapes à suivre sont résumées dans la figure suivante : 5.3 Création du JAR et génération des clés 1. $ jar cvf Count.jar Count.class $ keytool -genkey -alias signfiles -keypass \ kpi135 -keystore susanstore -storepass ab987c Options de genkey : -genkey : indique à keytool que l on souhaite générer des clés -alias signfiles : identifie cette entrée de manière unique sous l alias signfiles -keypass kpi135 : fournit un mot de passe lié à la clé privée qui va être générée. Il sera demandé pour tout accès à cette clé privée. Il peut être identique à celui du keystore. 12

-keystore susanstore : indique le nom du keystore à utiliser (/créer). Par défaut il est placé dans ~/.keystore -storepass ab987c : fournit un mot de passe pour le keystore Cette commande crée un certificat auto-signé valide 90 jours (c est le défaut, modifiable par -validity) 5.4 Signature du fichier JAR $ jarsigner -keystore susanstore -signedjar \ scount.jar Count.jar signfiles Le système demande alors le mot de passe du keystore et de la clé. S ils sont corrects, le fichier scount.jar est généré. 5.5 Exportation d un certificat On produit un certificat par l option -export de keytool : $ keytool -export -keystore susanstore \ -alias signfiles -file SusanJones.cer Là encore, le mot de passe du keystore est demandé. Le fichier généré, SusanJones.cer, peut être envoyé au destinataire. 5.6 Les étapes côté utilisateur Elles sont résumées dans la figure suivante : 13

5.7 Importation du certificat L utilisateur a reçu l archive signée. Comme elle contient le certificat, il faut d abord l extraire de l archive : $ keytool -import -alias susan -file \ SusanJones.cer -keystore raystore Ceci crée un nouveau keystore (raystore n existait pas), le protège par un mot de passe et affiche l empreinte du certificat. On peut alors la comparer à celle fournie par des sources de confiance sur le certificat de Susan Georges (par exemple en lui téléphonant et en lui demandant de donner la suite des chiffres de l empreinte de sa version de l archive signée). On l obtient par la commande $ keytool -printcert -file SusanJones.cer Si les empreintes sont identiques, on peut faire confiance à ce certificat et l inclure dans son keystore. 5.8 Création d une nouvelle ACL Il faut modifier le policy file pour autoriser l application à accéder aux ressources souhaitées (par exemple, lire les fichiers contenus dans le repertoire test.d). Pour cela, il faut indiquer dans le policy tool que l on va utiliser le keystore raystore pour le certificat le type d accès souhaité pour tout code possédant ce certificat de Susan Georges L ACL constituée a l aspect suivant : grant signedby "susan" { permission java.io.filepermission "${user.home}/src/tex.d/javasecurity.d/test.d/*", "read" } ; 6 Echange de documents signés La signature électronique est un excellent moyen d assurer l originalité d un document. Le principe est proche de celui mis en œuvre pour la signature d un code JAVA. La description qui suit suppose la transmission d un contrat entre l émetteur, Spirou, et le destinataire, Fantasio. 14

6.1 Etapes côté émetteur Introduction du document (le fichier contract) dans une archive JAR $ jar cvf Contract.jar contract Génération des clés de l émetteur (si elles n existent pas encore) $ keytool -genkey -alias signlegal \ -keystore spiroustore (optionnel) Génération d une demande de certificat (Certificate Signing Request, CSR) Signature de l archive $ jarsigner -keystore spiroustore -signedjar \ scontract.jar Contract.jar signlegal Exportation du certificat contenant la clé publique $ keytool -export -keystore spiroustore \ -alias signlegal -file spirou.cer Fourniture de l archive signée et du certificat au destinataire 6.2 Etapes côté destinataire Obtention de l archive (scontract.jar) et du certificat (spirou.cer) Importation du certificat (après vérification éventuelle de sa validité par comparaison à partir de l empreinte d un autre certificat trusted (autre.cer)) $ keytool -import -alias spirou -file \ spirou.cer -keystore fantasiostore $ keytool -printcert -file autre.cer 186 Fri May 26 14 :53 :28 CEST 2000 META-INF/SIGNLEGA.SF 973 Fri May 26 14 :53 :28 CEST 2000 META-INF/SIGNLEGA.DSA 0 Fri May 26 14 :48 :26 CEST 2000 META-INF/ smk 1023 Fri May 26 14 :48 :02 CEST 2000 contract s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified. Vérification de la signature de l archive $ jarsigner -verify -verbose -keystore \ fantasiostore scontract.jar 15

Extraction du contrat à partir de l archive vérifiée $ jar xvf scontract.jar contract 16