|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
Bonjour !
Je cherche a faire une applet qui fonctionne a peu pres partout. Cette applet a besoin d'ouvrir une socket sur le poste client (car l'applet sera serveur pour d'autres applets). Je sais faire cela en Java 1.4.2 en signant l'applet. Je n'arrive pas a faire cela en Java 1.1.4 (car il faut que mon applet soit compatible java 1.1.4 pour tourner sur une jvm microsoft, car de la plupart des postes clients) J'ai essayé de signer mon applet en java 1.1, mais ca ne fonctionne pas, je n'ai toujours pas la permission d'ouvrir ma socket ;o) Je sais qu'il existe des failles de sécurité dans java 1.1.4 permettant de contourner ce probleme... donc j'en suis réduit a 2 extremités : 1) trouver comment signer une applet "normalement" en java 1.1 afin de pouvoir ouvrir ma socket (sans avoir a rajouter un fichier certificat sur le poste client, par contre, un pop up ca me dérange pas) 2) utiliser les failles de sécurité du 1.1.4 pour executer ce que je veux (c'est pas joli, mais tant que ca marche, c'est pas grave ;o) Je precise que je veux pas développer un truc mechant, mais je vois pas d'autres moyens pour faire ce que je veux (applet de jeu de plateau style echecs sans serveur central) Merci ;o) Edit : mon applet sera faite pour tourner avec 2 jre : 1.1.4 et 1.4.2 ou superieur. Je prend pour politique que quelqu'un qui a deja mis a jour son plug in le fera de nouveau, donc je n'ai pas besoin de me préoccuper des versions intermediaires. |
|
|
00
|
|
|
#2 | ||||||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
Bon, apres avoir téléchargé le SDK de Kro$oft (berk), j'ai pu signer un morceau de code pour l'applet cliente.
Mais meme apres acceptation du certificat de sécurité, je n'arrive pas a ouvrir une socket sur le client ! j'ai ce code pour verifier avant que j'ai le droit : Code :
Or, il est dit dans la doc que NETIO correspond a la classe de Permission com.ms.security.permissions.NetIOPermission class. NETIO : The permission identifier representing the permission type that controls networking operations. This identifier corresponds to the permission implementation in the com.ms.security.permissions.NetIOPermission class. Mais lorsque je balance : Code :
Code :
Edit : j'ai essayé avec d'autres numeros de port, aussi bien avant 1024 qu'apres sans changement |
||||||
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
Bon, apres une semaine de recherche, j'ai enfin réussi a faire ce que je souhaite.
Je vous livre la solution complete. Je réunirais ainsi sur une seule page les 4 ou 5 pages essentielles qui m'ont permis d'arriver a ce résultat. Question : Comment faire une applet fonctionnant PARTOUT ! (i.e. : fonctionnant avec Java 1.1.4 de Microsoft et avec JDK 1.4.2 de Sun ET avec les droits étendus (pour mon test, j'ai mis tout les droits, a vous de trifouiller dans les options pour etre plus selectifs)) ******************** ** Regles de base ** ******************** * Utiliser les classes et les methodes de Java 1.1 (le JDK de Sun est disponible sur leur site dans la partie "Archive") Cela suppose evidemment de ne pas utiliser Swing. AWT pur ! * Ne pas utiliser de package ! Je sais que ca rend vite le code chiant a relire de pas tout organiser en package bien propre, mais apparement, il trouve pas la classe principale quand elle est dans un package sous Java 1.1.4 * Ne pas utiliser RMI... hélas, Microsoft n'a pas implémenté RMI. Il faudra donc utiliser uniquement les sockets pour les communications reseaux, c'est bien pauvre, mais c'est le prix pour une compatibilité optimale L'applet doit donc etendre de java.applet.Applet et si on ouvre une nouvelle fenetre, elle doit etendre de java.awt.Frame Maintenant, une fois qu'on a fait les classes, il faut signer tout ca ;o) Dans toute la suite, les valeurs en gras sont a remplacer par vos valeurs a vous (nom de compagnie, nom de fichiers, etc...) Je précise aussi que j'ai fait tout mes tests sous Eclipse 3.0. Mes projets sont organisés en 2 répertoires, "src" et "bin" contenant respectivement les sources .java et les fichiers .class, .jpg ou .gif qui devront etres contenus dans l'applet finale. L'OS utilisé est Win 2000 Pro, aussi les fichiers .bat devront etre modifiés legerement pour fonctionner sous d'autres versions (Win9x par exemple) ****************************** ** Signature Java SDK 1.4.2 ** ****************************** Il est conseillé de mettre de le répertoire bin/ de l'installation du jdk1.4.2 dans le classpath afin d'acceder plus facilement aux outils de signature. 0) creation d'un certificat (a faire une seule fois) C:/> keytool -genkey -alias Fladnag Tapez le mot de passe du Keystore : motdepasse Quels sont vos prénom et nom ? [Unknown] : Flad Nag Quel est le nom de votre unité organisationnelle ? [Unknown] : mon unité Quelle est le nom de votre organisation ? [Unknown] : mon organisation Quel est le nom de votre ville de résidence ? [Unknown] : ahah, t'as cru que tu pourrais le savoir hein ? Quel est le nom de votre état ou province ? [Unknown] : Tombouctou Quel est le code de pays à deux lettres pour cette unité ? [Unknown] : fr Est-ce CN=Flad Nag, OU=mon unité, O=mon organisation, L=ahah, t'as cru que tu pourrais le savoir hein ?, ST=Tombouctou, C=fr ? [non] : oui Spécifiez le mot de passe de la clé pour <Fladnag> (appuyez sur Entrée s'il s'agit du mot de passe du Keystore) : motdepasse 1) Creation d'un .jar (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>jar cvf Applet.jar *.* 2) Signature du .jar (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>jarsigner -storepass motdepasse -signedjar SApplet.jar Applet.jar Fladnag Le fichier SApplet.jar contient alors l'applet signée. Une fichier .bat (situé a la racine du projet) peut evidemment faire ca tout seul : @echo off del /q *.jar cd bin echo ** Creation du JAR ** jar cvf Applet.jar *.* move *.jar .. cd .. echo ** Signature du fichier JAR ** jarsigner -storepass motdepasse -signedjar SApplet.jar Applet.jar Fladnag echo ** Signature OK ! ** pause **************************************** ** Signature Microsoft SDK Java 1.1.4 ** **************************************** Tout d'abord, il faut télécharger le SDK de Microsoft. Aussi bizarre que cela paraisse, il n'a pas modifié les versions de java que j'avais installé... pour une fois qu'un produit microsoft ne modifie pas l'environnement, faut en profiter ;o) On peux facilement le trouver sur google en cherchant : "SDKJava40.exe" Une fois installé, on peux également rajouter dans le classpath le chemin jusqu'au répertoire Bin du dossier d'installation (il vaux mieux mettre le chemin apres le chemin du SDK de Sun, comme ca il ne va chercher que les fichiers que Sun n'a pas et on n'a pas de mauvaise surprise ;o) 0) creation des certificats et des clés (a faire une seule fois) C:\>makecert -sk KeyFladnag.pvk -n "CN=Fladnag" CertFladnag.cer C:\>cert2spc CertFladnag.cer CertFladnag.spc 1) creation de l'archive .cab (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>cabarc -r N Applet.cab *.* 2) Signature du fichier .cab (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>signcode -j JavaSign.dll -jp Low -spc CertFladnag.spc -k KeyFladnag.pvk -n "Mon Applet" -i http://www.monsite.com/explication_signature.html Applet.cab Le mot clé "Low" indique que l'applet aura tout les droits. On peux utiliser "High" pour en demander moins. On peux egalement faire un fichier spécifique pour demander juste les droits requis. http://www.monsite.com/explication_signature.html est juste une url vers laquelle l'internaute sera envoyé si il click sur le nom de l'application (ici "Mon Applet") lors de l'affichage du certificat de sécurité La encore le fichier "Applet.cab" contient l'archive signée. Comme auparavant, on peux faire un .bat : @echo off del /q *.cab cd bin echo ** Creation du CAB ** cabarc -r N Applet.cab *.* move *.cab .. cd .. echo ** Signature du fichier CAB ** signcode -j JavaSign.dll -jp Low -spc CertFladnag.spc -k KeyFladnag.pvk -n "Mon Applet" -i http://www.monsite.com/explication_signature.html Applet.cab echo ** Signature OK ! ** pause ************************************************* ** Adaptation du code pour la JVM de Microsoft ** ************************************************* Vous croyez que Microsoft c'est aussi simple que ca ? et bien non, evidemment ;o) Il faut rajouter quelques trucs dans le code pour que ca fonctionne correctement. Tout d'abord, si vous compilez sous Eclipse, vous aurez besoin des classes de Microsoft : 1) Installation des classes Microsoft dans Eclipse Les classes se trouvent dans le fichier Bin\ClassR.exe du dossier d'installation du SDK de Microsoft. C'est un fichier executable, mais ca a pas marché chez moi ;o) peut importe, il suffit de le décompacter avec WinRAR ou WinZIP. A l'interieur, on trouve encore un fichier .zip : "classes.zip". Pas besoin de le décompresser celui la. Dans Eclipse, click droit sur le projet de l'applet/Properties/Java Build Path/Libraries/Add External Jar... et on selectionne le "classes.zip" de Microsoft. 2) Validation des droits dans le code (et oui, y a pas ca chez Sun ;o) Tout d'abord, il faut savoir qu'on ne peux pas avoir de droits etendus sur une applet dans le Thread courant de l'Applet (ca serait trop simple !) Il faut donc avant toute chose creer un autre Thread et dans la methode run() acceder aux ressources que l'on souhaite : Code :
Le code qui verifie qu'on est bien sur une machine java microsoft et que les classes sont bien présentes avec le Class.forName est necessaire parce que meme si on a 2 archives, une pour chaque version de la jvm, c'est le meme code source compilé qu'on execute **************************************** ** Fichier HTML générique de l'applet ** **************************************** La derniere étape : Le fichier html. Là encore, j'ai trouvé une methode pour avoir meme fichier HTML pour IE et pour les autres navigateurs. Sinon, il aurais fallu detecter la jvm en PHP ou autre pour afficher le bon code html. voila donc les balises pertinentes : <applet codebase="http://www.monsite.com/applet/" archive="SApplet.jar" code="MonApplet.class" width="300" height="300"> <param name="archive" value="SApplet.jar"> <param name="cabbase" value="Applet.cab"> <param name="language" value="FR"> <b>Your browser isn't Java compatible.<br>Votre navigateur n'est pas compatible Java.</b> </applet> L'url du codebase est très importante, ca ne fonctionneras pas sans elle. Les 2 fichiers (.jar et .cab) doivent exister et etre accessibles aux URL suivantes (en gardant les noms des exemples) : http://www.monsite.com/applet/SApplet.jar http://www.monsite.com/applet/Applet.cab ********************************** ** Quelques liens de références ** ********************************** Signer une applet Java Microsoft JDK : http://www.ducrot.org/java/Securite.htm (2eme partie de la page) Liste des permissions pour le Microsoft JDK : http://ns.ensicaen.ismra.fr/dp/java/PermissionID.htm L'astuce du thread : * https://lists.xcf.berkeley.edu/lists...er/000766.html (fin de la page) * http://support.microsoft.com/default...b;en-us;175622 (La page officielle de microsoft... pas sur que ca serve a quelque chose mais bon ;o) ************ ** Astuce ** ************ * Pour faire des tests avec la machine virtuelle de Microsoft lors qu'on a un JDK de Sun installé, il suffit de désactiver celui ci pour IE : Panneau de Configuration/Java Plug-in/Navigateur/Décocher "Microsoft Internet Explorer" * Sous Mozilla, la console Java est dans Tools/Web Developpement/Java Console * Sous IE, avec le JDK installé, la console Java est dans Outils/Console Java (Sun) * Sous IE, sans le JDK Sun, la console Java de Microsoft est dans Affichage/Console Java (a condition d'avoir coché la case dans Outils/Options Internet/Avancé/"Console Java activée") *************************** ** Environnement de test ** *************************** Mozilla 1.5 avec JDK 1.4.2_05 IE 6.0 avec JDK 1.4.2_05 IE 6.0 avec JDK Microsoft (Java 1.1.4) Windows 2000 Pro **************** ** Conclusion ** **************** Voila ;o) J'espere avoir un peu epuisé le sujet ! N'hesitez pas a mettre cette page dans la FAQ ;o) |
||
|
|
10
|
|
|
#4 |
|
Membre actif
![]() Inscription : octobre 2002 Messages : 185 ![]() |
Bonjour,
En fait j'ai essayé la méthode ci-dessus, en donnant cette fois des droits d'impression, ça marche sur toutes les JVM SUN, et sur Mozilla et IE. Mais, ça ne fonctionne pas avec la JVM m$. Cette derniére ne présente même pas le certificat à l'utilisateur. Merci d'avance si quelqu'un peut m'aider. JHelp
__________________
Pour avoir une réponse efficace : 1) Soyez précis dans vos questions 2) Choisssez bien votre forum 3) Consultez la FAQ et la doc avant |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
tu n'as aucun message d'erreur dans la console du navigateur ?
as tu activé les bons droits permettant de faire ca ? (pour tester : com.ms.security.PolicyEngine.assertPermission(com.ms.security.PermissionID.SYSTEM ); correspond a tout les droits) accedes tu bien au code en question depuis un autre thread ? tu as bien les 2 fichiers (jar et cab) dans le fichier html ? tu n'as pas utilisé de packages ? |
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : octobre 2002 Messages : 185 ![]() |
Bonjour et merci d'essayer de m'aider,
Tout d'abbord sur l'ordi de test on a mis la version minimale de Java, soit la JRE 1.1.4 de M$ (Entre nous c'est vraiment pas un cadeau) et le pb, c'est qu'avec cette configuration, on a pas de console, donc les erreurs on les voit pas (c'est tres pratique). Ce qui ce passe c'est que l'apllet se lance sans demander le certificat, l'applet tourne, sans pouvoir bien sur imprimer. Le pire c'est que ca marche si on met une JRE de sun version 1.1, c'est ce qui est le plus rageant. Pour les droits, oui, j'y est penssé, j'ai même fait le test avec tous les droits possibles d'ouverts, il veut rien savoir. Pour le package, oui j'ai tout demonter mes beaux packages pour mettre tout dans le même dossier (Maintenant c'est un beau bazzard) Le cab et le jar sont bien dans le même endroit que le html, et le html, c'est le quasi copier-coller de ce que tu as donné Bref j'aimais déja pas trop M$, mais là ca dépasse l'entendement Si tu as une idée d'un test à faire, je suis preneur, car j'avoue là je suis à cours d'idée Autrement, ben ceux qui ont une jre M$ (La plus m... de la galaxie) ne pouront pas imprimer l'applet D'avance merci pour toute suggestion. JHelp
__________________
Pour avoir une réponse efficace : 1) Soyez précis dans vos questions 2) Choisssez bien votre forum 3) Consultez la FAQ et la doc avant |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
la solution a mon avis passe par l'installation d'une version plus complete (JDK et pas seulement JVM) de la version de Kro$oft... tu pourras ainsi avoir la console et voir le message d'erreur (car il y en a forcement un ;o)
|
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() |
petit conseil: si vous n'avez pas de console pour visualiser les erreurs, redirigez les flux dans des fichiers
Code :
__________________
gg |
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
Salut tlm
J'ai mon .spc et mon .pvk donc je tape : 1) creation de l'archive .cab (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>cabarc -r N Applet.cab *.* Cette 1ère opération nikel. 2) Signature du fichier .cab (a faire a chaque recompilation) C:\Workspace\MonApplet\bin>signcode -j JavaSign.dll -jp Low -spc CertFladnag.spc -k KeyFladnag.pvk -n "Mon Applet" -i http://www.monsite.com/explication_signature.html Applet.cab le par contre, cela me donne ceci : C:\Program Files\Microsoft SDK for Java 4.0\Bin>signcode -j JavaSign.dll -jp Low -spc mycert.spc -k mykey.pvk -n "Mon applet" -i http://www.url.com/chat/Help_Jav aApplet.html Applet.cab Error: Signcode Failed. Result = 80004005, (-2147467259) J'ai cherché sur le net ce type d'erreur et rien :/ qqn sait quoi faire avec ce genre d'erreur svp ? Laurent |
|
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Inscription : juillet 2003 Messages : 538 ![]() |
juste pour dire que j'ai appliqué cela (et j'ai meme posé des questions sur ce forum pour avoir des infos complementaires ) alors je donne mes petits problemes :
1/ Verifiez bien le contenu du *.cab Moi j'ai cherché longtemps, pour me rendre compte que la commande que j'avais tapé (qui venait d'ici je crois ) encapsulé mon *.jar dans mon *.cab et donc java ne trouvait pas les classes. Il faut donc bien sur ne pas faire ca. Le cab et le jar doivent la meme structure. 2/ Apres ca j'ai eu un bug a cause de la VM de Microsoft. En effet, j'effectuais l'ouverture d'un fichier et apparemment quand on effectue l'operation plusieurs fois d'affilée il a pas le temps de bien mener les operations comme il faut. J'ai resolu le pb en mettant Code :
try { Thread.sleep(10); }catch (Exception e) {} Ce qui est marrant c'est que Sun n'a jamais généré ce probleme ...vive kro$oft ... |
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
Citation:
faut rajouter un parametre apparement lors de l'appel a Cabarc. Si tu comprends pas l'anglais, tu peux essayer la version francaise... mais perso j'ai plus de mal a la comprendre que l'originale ;o) (traduction litterale pourrie ;o) |
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
Salut Fladnag,
je te remercie pour l'info, j'ai essayer mais j'ai obtenu la même erreur. Le certificat que j'ai a été delivré par la société " Thawte " et il contient un .spc et un .pvk avec un password (pour le .pvk). J'ai cherché sur le net, aucune des solutions ou commande ne fonctionne pour signée cet applet... . je m'en rapproche peut-être avec ça : C:\inetsdk\bin>signcode.exe -spc mycert.spc -v mykey.pvk -n "Name" -i www.erev ia.com -$ commercial -t http://timestamp.verisign.com/scripts/timstamp.dll MYPRO G.EXE Error: One or more input parameters are invalid. Error: Signing Failed. Result = 80070002, (-2147024894) Qu'est-ce que tu en pense ?? ps : je tire cette doc de : http://forum.vdsworld.com/viewtopic.php?t=2899&sid=cb7e51846ed0680534913c2779a6d127 Au pire, si tu veux, passe ton msn par mail... Merci |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 241 ![]() |
je ne pense pas que tu te rapproche de la solution etant donné que le message d'erreur que tu obtient parle de parametres invalides... or dans un programme, la logique voudrait qu'on verifie les parametres avant de faire autre chose... signecode va donc a mon avis "moins loin".
Est-tu sur d'utiliser la bonne version de signcode et du JDK de microsoft ? Le fichier d'install du JDK que j'ai utilisé fait 20287624 octets et s'appelle "SDKJava40.exe" (version 5.0.3229.0) avec une signature de microsoft datant de "jeudi 4 mai 2000 22:22:28" Le fichier signecode.exe fait 27408 octets, version 5.101.1671.1 Le fichier cabarc.exe fait 113664 octets, version 1.0.602.2 ps : ai pas msn, aime pas Kro$oft en fait ;o) |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
oui, j'utilise bien cette version...
je comprend vraiment pas, j'ai cherché pleins de doc sur le web, j'obtient tjrs la même erreur... je fais pourtant ce qui est dit... Laurent |
|
|
00
|
|
|
#15 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 82 ![]() |
bonjour,
Trés bonnes explications... Moi je suis en 1.4.2 j'ai créer mon applet signée... Donc normalement que devrai pouvoir avoir accès à l'ensemble de l'ordi distant. mais j'ai ce message d'erreur : Code :
|
||
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() Inscription : avril 2006 Messages : 22 ![]() |
Bonjour,
Ca fait des heures que j'essaie de signer une applet java microsoft. Mais la commande signcode me retourne toujours la meme erreur: Error: Signcode Failed. Result = 80004005 J'ai beau retourner la commande dans tous les sens, j'ai aussi essayé l'option "-s 6144 de cabarc.exe" mais rien a faire... Est ce que qqun a reussi a franchir cette etape? Salutations, |
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Inscription : mai 2006 Messages : 12 ![]() |
bonjour a tous,
Ma machine est un Windows XP Pro je devellope sous eclipse Version: 3.1.2 j'ai télécharger le SDK Java de Microsoft quand je clik sur ClassR.exe celui ci me dit que c'est pas la bonne version... quelqu'un a t-il une reponse ?? Merci d'avance |
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Étudiant Inscription : juin 2007 Messages : 27 ![]() |
Bonjour ^^
jdk 1.6.0. Je ne trouve pas le fameux ClassR.exe La procédure pour signer une applet est elle toujours la même ? @ tchaOo° |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Étudiant Inscription : juin 2007 Messages : 27 ![]() |
Coucou
Petit rafraichissement pour le remettre d'actualité. @ tchaOo° |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com