TP Sécurité Java, applets

Richard Grin (grin@unice.fr) Retour TPs

Attention, cette page est en cours de récriture !!!

Préliminaire :

Ce TP porte sur le système de sécurité fourni par Java 2. Comme il utilise des applets, il fonctionnera différemment selon les navigateurs (y compris selon les versions de ces navigateurs) et selon la version de Java utilisée pour exécuter les applets. Il a été testé avec Netscape version 4.77 et le plugin Java 1.3. Il fonctionne avec Mozilla sous Windows (jusqu'à maintenant c'est là que ça fonctionne le mieux). Si vous avez testé d'autres environnements, merci de me dire si ça fonctionne.

Pour ce TP, vous utiliserez Mozilla sous Linux et le plugin Java distribué avec la version 1.4.2.

Avec les dernières versions des navigateurs, la différence essentielle se rencontre avec les applets signées : l'utilisateur peut accepter le certificat, et dans ce cas, l'applet est autorisée à faire ce qu'elle veut sans tenir compte de la politique de sécurité locale. Heureusement, il est possible de modifier ce comportement comme on le verra à la fin du TP.

Installation du plugin Java avec Netscape (pour Mozilla sous Linux, tout est déjà installé dans vos salles de TP, au moins dans les salles 314 et ...)

La plupart des navigateurs Web n'utilisent pas encore Java 2. Le plugin est livré avec les dernières versions du SDK dans le répertoire plugin du jre. sous Unix/Linux, il faut indiquer le chemin où se trouve le plugin dans la variable d'environnement NPX_PLUGIN_PATH.

Par exemple, avec Netscape 4 sur une machine avec processeur Intel (avec Java installé sous /usr/local/java/jdk1.3) :
export
NPX_PLUGIN_PATH=/usr/local/java/jdk1.3/jre/plugin/i386/ns4

L'applet ne sera pas toujours exécutée par le plugin. Ca dépend du navigateur et du tag utilisé par la page HTML pour inclure l'applet. Voyez les informations données dans cette page.

Affichage de la console Java du plugin Java

Dans ce TP il est indispensable de voir les exceptions qui seront levées par les différentes applets. Pour cela il faut faire afficher la "console Java".

Avec Mozilla c'est très simple : menu Outils / Développement Web / Console Java.

Avec Netscape 4.77 :
Quand le plugin est installé, il ne faut plus utiliser la console Java de votre navigateur. Pour profiter des messages d'erreurs éventuels occasionnés par l'exécution des applets (ceux qui ne font jamais d'erreurs peuvent passer au paragraphe suivant ;-)), il faut faire afficher le panel de contrôle du plugin. le plus souvent, elle est affichée par défaut, sinon, vous lancez la commande ControlPanel placée sous le répertoire jre de votre installation Java (essayez quelque chose comme /usr/local/java/jdk1.4.2/jre/bin/ControlPanel). Cliquez sur l'onglet "Propriétés de base" et cochez "Afficher la console Java".


Exercice préliminaire : Tester une application

Testez cette application. Lisez et comprenez le code. Après quelques modifications que vous lui apporterez, elle affichera

Le bac à sable des applets

Voici un exemple d'exécution d'une applet. Elle affiche quelques propriétés et lit un fichier placé sur le serveur Web (chez moi donc). Allez voir les messages d'erreur dans la console Java du plugin (pour la lecture de certaines propriétés). Quand vous modifierez votre police de sécurité, par exemple pour donner l'autorisation aux applets de cette page (pas des autres URL) de lire user.home, relisez cet affichage pour voir s'il a changé.

Correction

Outre les réponses aux questions, les corrections comportent le code des applets.

TestAppletProprietes.java


Gestionnaire de sécurité avec une applet

  1. Vous devez voir à la fin de cet exercice une applet qui est une variante de l'applet de l'exercice précédent. Cette applet utilise des classes internes et toutes les classes ont été réunies dans un fichier jar. Examinez dans le source de cette page le tag associé à l'applet quand elle est dans un fichier jar.
    L'applet comporte :
  2. Testez cette applet. Vous pouvez modifier la zone de texte, par exemple en ajoutant des lignes, avant l'enregistrement. Evidemment vous aurez un message d'erreur au moment de l'enregistrement. Utilisez la console Java pour voir les messages d'erreur.
  3. Modifiez votre police de sécurité pour permettre l'enregistrement (attention, seulement pour le fichier ~/tmp/lignes et pour aucun autre fichier, et seulement pour les applets qui viennent de la page que vous êtes en train de lire).
    La technique : lancez l'applet et allez voir le message d'erreur dans la console Java du plugin. Copiez/coller le message du début dans votre fichier de police de sécurité, ajoutez ce qu'il faut pour respecter la syntaxe des fichiers de police. Relancez le navigateur et l'applet et recommencez la manoeuvre précédente jusqu'à ce que l'applet marche. Ainsi vous donnerez le minimum de permissions pour que l'applet marche.
    Attention, si vous changez votre fichier de police pendant les tests, le plugin Java n'en tiendra compte que si vous quittez le navigateur pour le relancer. Pensez-y si les modifications du fichier de police semblent ne pas être prises en compte. Vous pouvez aussi taper la commande "r" dans la console Java (toutes les commandes disponibles sont affichées au début de la console). Pour n'avoir que les derniers messages d'erreurs, il est aussi conseillé d'effacer régulièrement la console avec la commande "c".

Correction :

EcrireLignesLuesApplet.java
Fichier de sécurité


Donner des permissions à une applet signée

Depuis la version 1.4 du plugin, si une applet signée est dans la page Web, un message demande à l'utilisateur s'il fait confiance à l'applet. Si l'utilisateur répond qu'il lui fait confiance, l'applet a toutes les permissions. Essayez avec l'applet ci-dessous.

Si vous n'avez pas confiance dans les utilisateurs qui vont utiliser les applets que vous écrivez, il faut empêcher que, par mégarde ou méconnaissance des dangers, ils acceptent de faire confiance à une applet signée, sauf si la police de sécurité installée sur leur ordinateur donne les autorisations à l'applet. Pour cela, il faut ajouter aux permissions données à l'applet la permissions "usePolicy". Par exemple, si on a

grant codeBase xxx {

  permission yyyy;

  permission java.lang.RuntimePermission "usePolicy";

}

les applets qui viendront de xxx n'auront que l'autorisation yyy, même si elles sont signées. Le navigateur ne demandera pas à l'utilisateur s'il accepte de donner tous les droits à l'applet signée.

Changez votre politique de sécurité pour que seules les applets signées par un dénommé "toto" puissent écrire dans le fichier local ~/tmp/lignes. Testez à nouveau l'applet de l'exercice précédent. Elle ne devrait plus fonctionner car cette applet n'est pas signée par toto. N'oubliez pas de sortir de votre navigateur et de le relancer pour que la nouvelle politique de sécurité soit prise en compte.

Récupérez ce certificat du dénommé toto (ayez confiance... ;-) ).

Ci-dessous, une applet qui fait la même chose que l'applet de l'exercice précédent mais qui est dans un jar signé par toto (celui dont vous avez récupéré un certificat). Elle devrait fonctionner. Pour le vérifier, ajoutez des lignes nouvelles dans le texte et allez voir le contenu du fichier. Allez aussi voir les messages dans la console Java du plugin.

Correction :

Démarche à suivre


Gestionnaire de sécurité avec une application

  1. Reprenez l'application du départ. Lancez l'application avec un gestionnaire de sécurité. Voyez les messages d'erreur.
  2. Signez l'application (il faut donc la mettre dans un fichier jar) et changez votre politique de sécurité pour que l'application fonctionne sans erreur. La démarche pour la signature est expliquée ici (et dans le cours).

Correction :

Démarche à suivre
Fichier de sécurité
EcrireLignesLues.java


Pour ceux qui veulent en savoir plus sur la sécurité en Java...

Tutoriel sur la sécurité de Sun



Retour TPs