Wie lässt sich Java Webstart verwenden?
Die Vorteile dieses Verfahrens bestehen u.a. darin, dass Applikationen in signierter Form und in der jeweils neuesten Version ausgeführt werden können. Zudem sind sie weitgehend versionsunabhängig, werden lokal zwischengespeichert, sodass sie nicht jedes Mal nachgeladen werden müssen und laufen in einer Umgebung ab, die den strengen Java-Sicherheitsstandards entsprechen.
Ab der Version 11 wurde der Webstart-Standard von Oracle aufgegeben und ist nicht mehr in dessen Java-Distributionen enthalten. Um WebStart nach wie vor nutzen zu können, muss deshalb vorher dessen OpenSource-Implementierung von https://openwebstart.com/ heruntergeladen und installiert werden.
Um Java-Webstart zu nutzen, muss zunächst die auszuführende Java-Applikation als *.jar-Datei gepackt werden.
Der nächste Schritt ist das Erstellen einer *.jnlp-Datei. Das ist eine einfache XML-Datei mit der Endung *.jnlp, die dem folgenden Beispiel folgt. Gezeigt ist hier diejenige des hiesigen Webstart-Angebots von Cent.
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="https://javabeginners.de/webstart/"
href="https://javabeginners.de/webstart/jnlp/Cent.jnlp">
<information>
<title>Cent</title>
<vendor>javabeginners.de</vendor>
<homepage href="https://javabeginners.de/Projekte/Applications/Cent.php"/>
<description>
Cent - Konvertierung von Sonderzeichen zu HTML- oder numerischen Unicode-Entities
</description>
<description kind="short">
Cent Sonderzeichenkonvertierer
</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+"/>
<jar href="https://javabeginners.de/webstart/Cent.jar"/>
</resources>
<application-desc main-class="Cent"/>
</jnlp>
Gehen wir die Datei der Reihe nach durch:
- codebase definiert die URL des Ablageortes der *.jar-Datei auf dem Server, das href-Attribut die URL der *.jnlp-Datei.
- Der Bereich information speichert einige allgemeine
Informationen zum Zielprogramm. Die hier unter homepage
angegebene URL kann auf eine Webseite leiten, die weitere
Informationen für interessierte Nutzer bereitstellt.
offline-allowed bezeichnet ein Element, das festlegt, ob die Applikation offline betrieben werden kann, damit ggfs. auf den Cache des Webbrowsers zugegriffen werden kann. - Der Bereich security definiert die Sicherheitseinstellungen. Die Standardeinstellungen erlauben der geladenen Applikation keinen Zugriff auf das Dateisystem des Client-Rechners, Netzwerkzugriffe, etc. Dies kann durch die Eigenschaft all-permissions umgangen werden. Allerdings ist die digitale Signatur der ausgeführten *.jar-Datei hierfür zwingend nötig. Sie wird unten erläutert.
- resources legt fest, welche *.jar-Dateien mit dem auszuführenden Programm geladen werden müssen und wo sie gefunden werden können. Es muss unbedingt darauf geachtet werden, dass die Java-Versionsangaben innerhalb einer *.jar-Angabe, ebenso wie im einleitenden jnlp-Tag die korrekte Syntax aufweisen. Eine Angabe von z.B. 1.6.0 führt dazu, dass die Applikation u.U. nicht gestartet werden kann.
Weiterführende Informationen zur Syntax einer *.jnlp-Datei sind in englischer Sprache z.B. hier oder hier zu finden.
*.jar signieren
Um ein Programm per Webstart auszuführen, muss die
*.jar-Datei signiert sein. Hierzu muss zunächst ein
Schlüssel erstellt werden, mit dem die Datei dann in einem
zweiten Schritt signiert wird. Dies geschieht durch zwei
Kommandozeilen-Programme, die jedoch bereits mit dem Java-SDK
mitgeliefert werden:
Keytool erstellt einmalig einen sog. Keystore im
Home-Verzeichnis des Nutzers in der Datei .keystore,
der den Schlüssel enthält und passwortgeschützt
ist. Ist der Schlüssel abgelaufen, kann die Datei einfach
gelöscht und neu angelegt werden:
# -genkey erstellt den Schlüssel # -validity legt die Gültigkeit in Tagen fest # -keyalg bestimmt den Verschlüsselungsalgorithmus # -alias legt den Namen des Schlüssels fest keytool -genkey -validity 365 -keyalg rsa -alias meinKey
Nun kann die *.jar-Datei signiert werden. Hierzu wechselt man in das Verzeichnis mit der *.jar-Datei
cd pfadZurJarDatei
und führt die Signatur mit dem jarsigner aus:
jarsigner meineDatei.jar meinKey
Ausführung eines Webstarts
Durch Einbindung der *.jnlp_Datei in eine Webseite kann ein Webstart angeboten werden:
<a href="pfadZurJnlpDatei.jnlp">start</a>
Seine Ausführung kann dann durch Aufrufen des Links oder
alternativ durch Download und Ausführen der *.jnlp-Datei
angestoßen werden.
In jedem Falle kann es in der Folge
zu einer Warnung vor dem Ausführen einer selbst-signierten
oder sogar gar nicht signierten Datei kommen.
Entsprechendes Vertrauen vorausgesetzt1, kann dies umgangen werden, indem im Java Control Panel unter dem Registerreiter 'Sicherheit' unten im Feld unter 'Ausnahmeliste' eine entsprechende Ausnahme für den jeweiligen Anbieter, hier https://javabeginners.de, gesetzt wird.
1) Das Ausführen einer von einer nicht als vertrauenwürdig eingestuften Zertifizierungsstelle zertifizierten Anwendung wird von Java aus guten Gründen prinzipiell nicht empfohlen. Nähere Informationen hierzu unter https://java.com/de/download/help/appsecuritydialogs.xml
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.