2010-01-07 21 views
2

J'ai un problème avec une applet Java signée - en particulier, pourquoi elle n'est pas signée avec mon certificat. J'utilise Maven dans Eclipse. L'applet (a) permet à l'utilisateur de choisir un fichier ou un répertoire local, (b) crypte le (s) fichier (s) et (c) télécharge le (s) fichier (s) sur une page Web basée sur PHP. L'applet est signée, vraisemblablement en utilisant mon certificat - c'est-à-dire, via le code Maven, en utilisant le plug-in maven-jar. Par exemple:Applet de signature avec le plug-in JAR Maven et le château gonflable

<plugin>     
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId>     
<executions> 

signe

/
/images/ src/main/resources/META-INF/MANIFEST.MF faux [PATH_TO_MY_KEYSTORE] [MON ALIAS] [******] [******] [PATH_TO_SIGNED_JAR] vrai vrai

(Il est évident que j'ai masqué une partie de cela parce que Je travaille pour des paranoïaques!) Tout est bien emballé et l'applet se charge dans la page; cependant, deux choses sont gênantes: (1) quand l'applet se charge, il identifie la légion de Bouncy Castle comme le certificat utilisé pour signer l'applet et (2) tandis que l'applet, utilisant un JFileChooser peut accéder au système de fichiers, un refusé "permission - au (x) fichier (s) - est lancé en essayant d'exécuter (c) ci-dessus, en envoyant le fichier sur le site web. (J'utilise Apache HTTP Components pour le faire.)

Mon applet est emballé séparément des bocaux dépendants - y compris les bocaux Bouncy Castle.

Ma question est la suivante: Pourquoi BC est-elle le signataire de mon applet et non mon propre certificat, comme indiqué ci-dessus? Est-ce un problème Maven? En développement, bien sûr, tout fonctionne bien car Eclipse écrit le fichier de stratégie pour Applet Viewer.

Voici un extrait de la sortie dans Eclipse - il semble que tout devrait être Honky Dory:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-jar-plugin:2.2:sign' with basic configurator --> 
[DEBUG] (s) alias = myalias 
[DEBUG] (s) basedir = C:\..\target 
[DEBUG] (f) finalName = app-0.0.1-SNAPSHOT 
[DEBUG] (s) jarPath = C:\..\app-0.0.1-SNAPSHOT.jar 
[DEBUG] (s) keypass = 1234 
[DEBUG] (s) keystore = C:\..\my.keystore 
[DEBUG] (s) project = MavenProject: App:app:0.0.1-SNAPSHOT @ C:\..\app\pom.xml 
[DEBUG] (f) signedjar = C:\..\signed.jar 
[DEBUG] (f) skip = false 
[DEBUG] (s) storepass = 1234 
[DEBUG] (s) verbose = true 
[DEBUG] (s) verify = true 
[DEBUG] (f) workingDirectory = C:\..\app 
[DEBUG] -- end configuration -- 
[INFO] [jar:sign] 
[DEBUG] Setting context classloader for plugin to: /plugins/org.apache.maven.plugins:maven-jar-plugin:[email protected]/thread:main (instance is: ClassRealm[/plugins/org.apache.maven.plugins:maven-jar-plugin:[email protected]/thread:main, parent: ClassRealm[plexus.core, parent: null]]) 
[DEBUG] jarsigner executable=[C:\Java\jdk1.6.0_16\jre\..\bin\jarsigner.exe] 
[DEBUG] mdkirs: false C:\..\app 
[DEBUG] Executing: cmd.exe /X /C '"C:\Java\jdk1.6.0_16\jre\..\bin\jarsigner.exe -verbose -keystore C:\...\my.keystore -storepass ****** -keypass ****** -signedjar C:\...\signed.jar C:\...\target\app-0.0.1-SNAPSHOT.jar myalias"' 
[INFO] updating: META-INF/MANIFEST.MF 
[INFO] adding: META-INF/APP.SF 
[INFO] adding: META-INF/APP.RSA 
[INFO] adding: com/ 
[INFO] adding: com/applet/ 
    ... 
[INFO] adding: images/ 
[INFO] signing: com/applet/DemoApplet$1.class 
[INFO] signing: log4j.xml 
[INFO] signing: target.classes 
[debug] jarsigner executable=[C:\Java\jdk1.6.0_16\jre\..\bin\jarsigner.exe] 
[debug] Executing: cmd.exe /X /C '"C:\Java\jdk1.6.0_16\jre\..\bin\jarsigner.exe -verify -verbose C:\...\signed.jar"' 

Toute aide serait grandement apprécié. Merci. Incidemment, voici la trace de la pile:

General exception: access denied (java.io.FilePermission C:\Documents and Settings\Paul\My Documents\text.txt read) 
java.security.AccessControlException: access denied (java.io.FilePermission C:\Documents and Settings\Paul\My Documents\text.txt read) 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkRead(Unknown Source) 
at java.io.File.isFile(Unknown Source) 
at sun.awt.shell.ShellFolder.isFile(Unknown Source) 
at org.apache.commons.httpclient.methods.multipart.FilePartSource.<init>(FilePartSource.java:68) 
at com.securustek.applet.DemoApplet.sendFiles(DemoApplet.java:1098) 
at com.securustek.applet.DemoApplet.actionPerformed(DemoApplet.java:448) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

Merci encore.

+0

Etes-vous capable de signer et de vérifier le pot sans utiliser le script maven? c'est-à-dire de la ligne de commande? – Keibosh

+0

Oui, je peux signer et vérifier le pot en dehors du POM maven - c'est-à-dire, à partir de la ligne de commande.Cependant, je reçois toujours l'avertissement "la signature de l'application ne peut pas être vérifiée" de la JVM (dans le navigateur) avec le nom: [mon nom d'application] et l'éditeur: la légion du château gonflable - même si le certificat utilisé pour le signer est un certificat auto-signé que j'ai créé avec OpenSSL ...? – pkriebel

Répondre

0

Je ne suis pas sûr mais il peut être à cause du certificat lui-même parce que le problème d'accès de sécurité ... Je veux dire qu'il peut expirer. Est-il nouveau créé? Mais encore il devrait y avoir plus de détails à analyser ...

Avez-vous vérifié la structure des classes MANIFEST? Sont-ils tous signés?