Jar signieren

Status
Nicht offen für weitere Antworten.

WieselAc

Top Contributor
Hallo,

zu test Zwecken habe ich mir ein Jar erstellt, das lokal funktioniert. Jetzt möchte ich dieses gerne via Webstart über das Netz zur Verfügung stellen.

Ich habe deshalb versucht mit Hilfe des FAQ Script das Jar aus den .class Dateien signiert zu erstellen zu lassen, aber scheinbar klappt das nicht.

Das Script habe ich erstmal weitest gehend so gelassen wie es ist (JDK Path geändert, lokale Ordner dem jar hinzugefügt), in den Projekt Ordner gelegt und dann ausgeführt (im dem Ordner befindet sich zu dem Zeitpunkt weder ein jar noch eine manifest Datei)

Code:
@echo off
rem * SignTool by L-ectron-X (java-forum.org)
rem *
rem * Ablauf beim Signieren
rem *
rem * Erzeugen eines eigenen Schlüssels
rem * Mit KeyTool, einem Werkzeug aus dem SDK, einen neuen Schlüssel erzeugen:
rem * keytool -genkey -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend Dein Passwort ein.
rem
rem * Erzeugen eines Zertifikats
rem * Mit KeyTool Zertifikat erzeugen:
rem * keytool -selfcert -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend dein Passwort ein.
rem *
rem * Signieren des Applets
rem * Signieren des Applets mit Hilfe des Tools jarsigner
rem * jarsigner signed.jar Signer
rem * Und noch einmal dein Passwort eingeben.

echo = SignTool.bat =
echo Dieses Tool hilft beim Erzeugen von signierten jar-Dateien
echo.
echo Schritt 1: jar-Dateien erzeugen
echo -------------------------------

rem Pfad zum SDK setzen
rem --> anpassen!
set path=.;D:\Programme\Java\jdk1.5.0_02\bin

echo Manifestdatei erzeugen...
echo Manifest-Version: 1.0>manifest.mf
echo Created-by: SignTool by L-ectron-X>>manifest.mf

if exist *.jar goto key
echo jar-Datei mit angegebenen Parametern erzeugen...
rem --> anpassen!
rem * In diesem Beispiel werden alle .class-Dateien und die Verzeichnisse bilder und etc
rem * mit ins jar-Archiv gepackt.
jar cfmv MeinJar.jar manifest.mf *.class pics props

:key
echo.
echo Schritt 2: Schluessel generieren
echo --------------------------------
rem --> anpassen!
keytool -genkey -alias Signer -dname "cn=Dein Name, c=de"

echo.
echo Schritt 3: Zertifikat erzeugen
echo ------------------------------
rem --> anpassen!
rem -validity 18250 (365 Tage x 50) erzeugt ein 50 Jahre gültiges Zertifikat
keytool -selfcert -validity 3650 -alias Signer -dname "cn=Dein Name, c=de"

if not exist *.jar goto error
echo.
echo Schritt 4: jar-Datei signieren
echo ------------------------------
echo jarsigner erwartet hier nochmals dein Passwort.
rem --> anpassen!
jarsigner MeinJar.jar Signer

echo.
echo Schritt 5: Zertifikat testen
echo ----------------------------
rem --> anpassen!
jarsigner -verify -verbose -certs MeinJar.jar
goto end

:error
echo.
echo Es wurde keine jar-Datei zum Signieren gefunden.
echo Die Erzeugung der jar-Datei ist moeglicherweise fehlgeschlagen.
echo Pruefe deine Eingaben in der Batchdatei!

:end
if not exist manifest.mf goto console
echo.
rem Manifest von Festplatte löschen
del manifest.mf

:console
rem Console für Ausgaben noch geöffnet lassen
echo.
pause

In der Konsole habe ich dann konsequent Signer eingetippt und folgenden output erhalten:


Code:
= SignTool.bat =
Dieses Tool hilft beim Erzeugen von signierten jar-Dateien

Schritt 1: jar-Dateien erzeugen
-------------------------------
Manifestdatei erzeugen...
jar-Datei mit angegebenen Parametern erzeugen...
*.class : Datei oder Verzeichnis existiert nicht.
pics : Datei oder Verzeichnis existiert nicht.
props : Datei oder Verzeichnis existiert nicht.
Manifest wurde hinzugef³gt.

Schritt 2: Schluessel generieren
--------------------------------
Geben Sie das Keystore-Passwort ein:  Signer
Geben Sie das Passwort f³r <Signer> ein.
        (EINGABETASTE, wenn Passwort dasselbe wie f³r Keystore):  Signer

Schritt 3: Zertifikat erzeugen
------------------------------
Geben Sie das Keystore-Passwort ein:  Signer

Schritt 4: jar-Datei signieren
------------------------------
jarsigner erwartet hier nochmals dein Passwort.
Enter Passphrase for keystore: Signer

Schritt 5: Zertifikat testen
----------------------------

          61 Thu Jun 07 15:08:58 CEST 2007 META-INF/MANIFEST.MF
         192 Thu Jun 07 15:09:16 CEST 2007 META-INF/SIGNER.SF
         813 Thu Jun 07 15:09:16 CEST 2007 META-INF/SIGNER.DSA
           0 Thu Jun 07 15:08:58 CEST 2007 META-INF/

  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar is unsigned. (signatures missing or not parsable)


Drücken Sie eine beliebige Taste . . .


nach der Schlussmeldung ist das Jar augenscheinlich nicht signiert und auch lokal ist es nicht mehr ausführbar.

Code:
E:\java\workspace\Puzzel>java -jar MeinJar.jar
Failed to load Main-Class manifest attribute from
MeinJar.jar

Weiß zufällig jemand was ich ändern muss?
 

L-ectron-X

Gesperrter Benutzer
Das Passwort, welches du eingibst, kannst du dir selbst ausdenken, Signer funktioniert natürlich auch.
Die Batchdatei muss im richtigen Verzeichnis liegen, so wie's aussieht werden weder class-Dateien noch Verzeichnisse gefunden. So lange, wie du das nicht gerade rückst, wird keine bzw. eine nicht funktionierende Jar-Datei als Ergebnis erhalten.
Eine Manifestdatei hast du nicht, weil diese nach dem Erzeugen wieder gelöscht wird. In einer funktionierenden Jar-Datei ist sie dann eingebaut.
 

WieselAc

Top Contributor
Danke erstaml für das Script ansich und ins besondere für den Tipp. Jetzt gehts!

Hatte die Batsch in den project, statt in den darin enthaltenen bin Ordner gelegt.


Eine Frage habe ich aber noch, wo ist den in dem Script vorgesehen, die Main Klasse anzugeben?
 

WieselAc

Top Contributor
Hab mir mal erlaubt, dass einfach an die mir geeignet scheinende Stelle zu packen:

Code:
...
echo Manifestdatei erzeugen...
echo Manifest-Version: 1.0>manifest.mf
echo Created-by: SignTool by L-ectron-X>>manifest.mf 
echo Main-Class: puzzle.Main>>manifest.mf
...

Fehlt das bewusst in dem Script?
 

L-ectron-X

Gesperrter Benutzer
Eigentlich war das Ganze vorgesehen, um Applets zu signieren, da gibts keine Main-Class. Aber dein eingetragener Parameter passt natürlich an diese Stelle.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben