web-dev-qa-db-fra.com

Comment signer une applet Java pour une utilisation dans un navigateur?

J'essaie de déployer une applet Java sur mon site Web. Je dois également la signer, car je dois accéder au presse-papiers. J'ai suivi tous les didacticiels de signature que j'ai pu trouver mais que j'ai pas eu de succès. Voici ce que j'ai fait jusqu'à présent:

  • A écrit une applet dans NetBeans. Il fonctionne correctement dans la visionneuse d'applet.
  • Vous en avez fait un fichier .jar.
  • A créé un certificat en procédant comme suit:
keytool -genkey -keyalg rsa -alias myKeyName
keytool -export -alias myKeyName -file myCertName.crt
  • Je l'ai signé avec jarsigner comme ceci:
jarsigner "C:\my path\myJar.jar" myKeyName
  • Création d'un fichier html contenant ceci:
<html>
  <body>
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/>
  </body>
</html>

Lorsque j'ouvre ce fichier html, je n'obtiens jamais la boîte de dialogue de confirmation de la sécurité (et donc j'obtiens l'erreur "Java.security.AccessControlException: accès refusé"). Cela se produit sur tous les navigateurs.

Suis-je en train de manquer une étape?

40
user107312

C'est peut-être parce que vous ouvrez des fichiers .class extérieur le fichier jar?

De cette façon, il peut ne pas afficher l'avertissement. J'ai essayé de le faire de cette façon, mais cela m'a toujours montré l'avertissement de certificat et pour un cas simple, cela m'a en fait empêché d'accéder à une classe du JAR avec la classe séparée.

Peut-être que votre configuration ou organisation de fichiers spécifique provoque ce problème. Si vous pouvez disposer cela plus en détail, nous pourrions vous aider mieux (ou plutôt, essayez de mettre tous ces fichiers .class dans un autre Jar signé et ajoutez-le à l'archive "..., anotherJar.jar").

7
EdSG

3 étapes faciles

  1. keytool -genkey -keystore myKeyStore -alias me

  2. keytool -selfcert -keystore myKeyStore -alias me

  3. jarsigner -keystore myKeyStore jarfile.jar me

29
nuno_cruz

Tout d'abord, je suggère d'obtenir un certificat de signature de code valide. Vous pouvez obtenir un certificat gratuit auprès de Thawte . Bien que ces certificats soient généralement utilisés pour S/MIME, ils sont également valables pour la signature de code.

La deuxième option consiste à importer votre certificat auto-signé dans le fichier cacert du JRE que votre navigateur invoque.

La prochaine chose à vérifier est de vous assurer que votre navigateur exécute votre dernier pot. Une façon de procéder consiste à toujours incrémenter votre numéro de version. L'autre option est pour vous de vider votre cache d'applet Java. J'efface généralement le cache de mon navigateur également, mais cela ne devrait pas être nécessaire.

1
brianegge

Voici un moyen de signer vos fichiers jar puis de vérifier que tous les fichiers de classe sont signés avec votre fichier de clés.

#!/bin/bash
KEYSTORE=/home/user/NetBeansProjects/sign/keystore
FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"`
for f in $FILES; 
   do echo password |  /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself;
   echo "Signed $f"; 
  /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u;
done
1
Milhous

Vous avez mentionné:

Lorsque j'ouvre ce fichier html, je n'ai jamais la boîte de dialogue de confirmation de sécurité ...

Ouvrez-vous le fichier à partir de votre système de fichiers local ou via une URL vers un serveur Web hébergeant le fichier HTML et le ou les pots d'applet? Cela pourrait être la raison pour laquelle vous ne recevez aucun avertissement.

1
monceaux