web-dev-qa-db-fra.com

Que signifie l'avertissement de sécurité Java Applet "Le manifeste du fichier JAR ne contient pas l'attribut Permissions")?

J'ai un Java Applet qui a besoin d'accéder au système de fichiers local du client. J'ai créé un certificat simple pour moi-même (il n'est PAS certifié par Verisign, Commodo, ...). I signé le pot avec le modèle suivant:

del \Users\koalabruder\.keystore
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -genkey -alias %1 -keypass kp -dname "cn=inin" -storepass ab987c
"C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe" -storepass abc -keypass kp %2 %1
"C:\Program Files\Java\jdk1.7.0_45\bin\keytool" -export -storepass abc -alias %1 -file %3

Le simple avertissement de sécurité que je n'ai "aucun certificat signé" existe depuis des années et n'est pas mon problème.

Mon problème est que l'avertissement de sécurité modifié parce que l'une des dernières mises à jour Java:

Cette application sera bloquée dans une future mise à jour de sécurité Java car le fichier manifeste JAR ne contient pas l'attribut Permissions. Veuillez contacter l'éditeur pour plus d'informations.

Qu'est-ce que ça veut dire? Comment puis-je le réparer? Dois-je acheter un certificat? Dois-je corriger le manifeste (MANIFEST.MF)? Qu'est-ce que l'attribut Permission?

Mise à jour: Voici mon manifeste du fichier jar

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Application-Name: inin 
Permissions: all-permissions 
Created-By: 1.7.0_45-b18 (Oracle Corporation)

Name: net/inin/transfer/ul/UlPanel.class
SHA-256-Digest: asdfasddddddddddddddddddddddddddddddddd=
23
koalabruder

Vous n'avez pas besoin d'acheter un certificat, il suffit de corriger le fichier manifeste.

Ajoutez cette ligne:

permissions: all-permissions

Ou cette ligne si vous n'avez besoin que d'un accès limité:

permissions: sandbox
8
jzd

J'ai rencontré le même problème et changer mon manifeste ne l'a pas résolu.

Finalement, j'ai découvert que j'ai référencé une bibliothèque qui est venue dans son propre pot avec son propre manifeste. J'utilisais une copie de ce fichier jar qui n'avait pas les autorisations et la base de code.

Donc, si vous référencez des bibliothèques à l'exception de la bibliothèque JRE System, vérifiez le manifeste dans le fichier jar (par exemple en l'ouvrant avec 7Zip). S'il ne contient pas les attributs, vous pouvez:

  • vérifiez si le fabricant a une nouvelle version. Il avait peut-être déjà remarqué le problème.
  • Décompressez le fichier jar, modifiez le manifeste et remettez-le en pot, ou
  • Fusionnez la bibliothèque avec votre propre pot.

Pour les deux derniers, vérifiez la licence sous laquelle la bibliothèque est publiée. Vous n'êtes peut-être pas autorisé à manipuler le produit de cette façon.

2
Thomas Heckmann

Dans Netbeans, j'ai remarqué que le fichier manifeste est généré lors de la génération .. donc brièvement ce que j'ai fait pour résoudre ce problème afin d'inclure mes attributs de manifeste dans ce modèle qui est responsable de la génération du manifeste.

Pour ce faire, procédez comme suit:

1- Ouvrez ce fichier avec n'importe quel éditeur: (PATH)\nbproject\jfx-impl.xml
(CHEMIN): est le chemin de votre projet.

2- Recherchez: "// manifest". le mien ressemble à:

                // manifest
                var man = jar.createManifest();
                var a1val = project.getProperty("application.vendor");
                var a1 = new org.Apache.tools.ant.taskdefs.Manifest.Attribute();
                a1.setName("Implementation-Vendor");
                a1.setValue(a1val);
                man.addConfiguredAttribute(a1);
                var a2val = project.getProperty("application.title");
                var a2 = new org.Apache.tools.ant.taskdefs.Manifest.Attribute();
                a2.setName("Implementation-Title");
                a2.setValue(a2val);
                man.addConfiguredAttribute(a2);
                var a3 = new org.Apache.tools.ant.taskdefs.Manifest.Attribute();
                a3.setName("Implementation-Version");
                a3.setValue("1.0");
                man.addConfiguredAttribute(a3);


                //******insert your Attributes code here*******

                jar.perform();

3- Sous "// * insérez vos Attributs ici ** ", vous pouvez insérer votre propre code d'attribut manifeste, dans ma situation, il suffit d'inclure la base de code et les autorisations .. vous pouvez également utiliser mon code:

                ...                 
                //******insert your Attributes here*******
                var a50 = new org.Apache.tools.ant.taskdefs.Manifest.Attribute();
                a50.setName("permissions");
                a50.setValue("all-permissions");
                man.addConfiguredAttribute(a50);

                var a51 = new org.Apache.tools.ant.taskdefs.Manifest.Attribute();
                a51.setName("codebase");
                a51.setValue("*");
                man.addConfiguredAttribute(a51);
                ...

4- Construisez ensuite et vous ne verrez plus cet avertissement.

Quelques notes:

  • Je recommande fortement de vérifier la documentation des attributs du manifeste qui concerne la sécurité @ http://docs.Oracle.com/javase/tutorial/deployment/jar/secman.html

  • n'utilisez pas la valeur générique "*" dans la base de code, et il sera préférable d'utiliser https au lieu de http pour des raisons de sécurité :-) Je l'utilise uniquement pour le développement.

bonne chance,'.

1
Maher Abuthraa

J'ai rencontré cet avertissement lors de la mise à jour de la signature sur une applet préexistante (un composant qui interface une carte à puce utilisateur et donc pour fonctionner correctement nécessite d'être signé avec un certificat "fort").

L'ajout de l'attribut codebase, par exemple: "Codebase: xyz.com" fait en fait disparaître l'avertissement (notez que le texte d'avertissement d'origine faisait référence, comme dans ce cas, à des problèmes liés à l'attribut "Permission" et non à l'attribut codebase.) .).

C'est probablement un bug dans le jre?

1
user1430808