JNLP Signieren

A.T.

Bekanntes Mitglied
Hallo zusammen,

ich haben ein Projekt bei dem die Jars signiert werden müssen. Das Funktionert auch alles wie es soll. Allerdings bekommt man immer die Fehlermeldung das die JNLP-Datei nicht signiert wurde.

Nach etwas suchen im hier im Forum und im Internet bin ich leider nicht schlauer...

So wie ich das im Moment sehe müsste ich meine JNLP-Datei in das Jar mit der Main Methode packen. Die JNLP-Datei müsste in den Ordner JNLP-INF abgelegt werden und die JNLP-Datei müsste APPLICATION.JNLP heißen.

Das hätte aber zur Folge das ich nur eine einzige JNLP-Datei verwenden könnte!? Ich brauche aber mindestens zwei!

Gibt es eine Möglichkeit einen beliebigen Namen zu verwenden?
Ist es überhaupt richtig die JNLP-Datei in den Ordner JNLP-INF abzulegen?
Was ist mit Variabeln wie $$codebase? Können die weiter verwendet werden?

Danke für eure Hilfe!
Gruß
Andreas
 
Hallo,

warum mußt du auch die JNLP-Datei signieren? Das ist eigendlich etwas ungewöhnlich. Den meisten reicht es, wenn die Jars signiert sind.

Ich habe mal das in den Spezifikationen gefunden:
5.4.1 Signing of JNLP Files

A JNLP file can optionally be signed. A JNLP Client must check if a signed version of the JNLP file exists, and if so, verify that it matches the JNLP file that is used to launch the application. If it does not match, then the launch must be aborted. If no signed JNLP file exists, then the JNLP file is not signed, and no check needs to be performed.

A JNLP file is signed by including a copy of it in the signed main JAR file. The copy must match the JNLP file used to launch the application. The signed copy must be named: JNLP-INF/APPLICATION.JNLP. The APPLICATION.JNLP filename should be generated in upper case, but should be recognized in any case.

The signed JNLP file must be compared byte-wise against the JNLP file used to launch the application. If the two byte streams are identical, then the verification succeeds, otherwise it fails.

As described above, a JNLP file is not required to be signed in order for an application to be signed. This is similar to the behavior of Applets, where the Applet tags in the HTML pages are not signed, even when granting unrestricted access to the Applet.

Ich denke mal, wenn du verschiedene JNLPs verwenden willst (Warum überhaupt?), dann kannst du die Sache mit dem signierten JNLP vergessen. Wenn ich es richtig verstehe, ist die ganze Sache nämlich nur darauf ausgelegt, mit nur einer einzigen JNLP zu funktionieren.

MfG
hansmueller
 
Danke für deine schnelle Antwort!

Die JNLP soll auch signiert werden, da es immer eine Warnmeldung gibt wenn sie unsigniert ausgeführt wird. Einige Menschen scheint das zu verwirren.
Da hätte ich auch mal reingucken sollen...
Es gibt ein "Hilfsprogramm" das ohne den eigentlich Client ausgeführt werden kann. Das muss leider auch so bleiben. Daher brauche ich mehr als eine JNLP. Da aber die Main Methoden in verschieden Jars liegen, wäre es also doch möglich.

Was ich noch nicht ganz verstehe ist, muss nur die Kopie innerhalb des Jars diesen festgeschrieben Namen haben oder nicht? Dann wäre wirklich nur eine JNLP möglich.
Und zu der Frage ob die Variabeln ersetzt werden bevor oder nachdem geprüft wird, habe ich leider auch nichts gefunden. Wenn Sie vor dem vergleich ersetzt werden wäre das signieren natürlich wieder erfolglos...

Gruß
Andreas
 
Hallo,

A.T. hat gesagt.:
Was ich noch nicht ganz verstehe ist, muss nur die Kopie innerhalb des Jars diesen festgeschrieben Namen haben oder nicht? Dann wäre wirklich nur eine JNLP möglich.
Ich glaube, du kannst der JNLP einen beliebigen Namen geben. Nur innerhalb der Jar muß es halt den Spezifikationen entsprechend benannt werden.

A.T. hat gesagt.:
Und zu der Frage ob die Variabeln ersetzt werden bevor oder nachdem geprüft wird, habe ich leider auch nichts gefunden. Wenn Sie vor dem vergleich ersetzt werden wäre das signieren natürlich wieder erfolglos...
Die JNLP die der Anwender herunterlädt wird mit der JNLP in der Jar verglichen. Nur wenn diese auch binär identisch sind, hält WebStart diese für ok. Wenn du jetzt den Anwender eine JNLP mit irgendwelchen Variablen zuschickst, kann diese auch nicht mit der JNLP in der Jar binär identisch sein.
Du kannst es ja mal ausprobieren. Vielleicht haben die Entwickler an Variablen gedacht. Wenn nicht, Pech gehabt.

Eine etwas aufwendigere Lösung wäre, für jede JNLP, die generiert wird, auch eine Jar mit dieser JNLP zu erstellen und zu signieren und diese dann dem Anwender zukommen zu lassen, der auch die entsprechende JNLP bekommen hat. Diese Lösung ist aber nur unter ganz bestimmten Voraussetzungen machbar.

MfG
hansmueller
 

Zurück
Oben