Grundlagen Java Webstart - Sandbox

Aus Byte-Welt Wiki
Wechseln zu: Navigation, Suche


Ein Java-Programm, dass über WebStart gestartet wird, läuft standardmäßig in einer sogenannten "Sandbox" ab. D. h. das Programm darf praktisch nichts auf dem (Client-)Rechner machen, z. B. Dateien auf die Festplatte schreiben oder lesen, Systemvariablen abfragen usw. Dies stellt sicher, daß das Programm nicht machen kann, was es will (wie z. B. die Festplatte löschen).

Siehe Java Web Start and Security (The Java™ Tutorials > Deployment > Java Web Start)

Oder für die Grundlagen: Java(TM) Web Start Java Web Start 1.5.0 Developer Guide

Es gibt 2 Möglichkeiten die Beschränkungen der Sandbox zu beseitigen bzw. zu umgehen:

1. Über das Packet javax.jnlp Es handelt sich dabei um die jar-Datei Java/jdk1.6.0xxx/sample/jnlp/servlet/jnlp.jar" Diese musst du in deinen Classpath eintragen. Dann erhältst du zusätzliche Klassen, mit denen du jeden bisher geblockten Zugriff auf den Clientrechner durch eine Erlaubnis des Anwenders aufheben kannst. Das ganze sieht dann so aus: Wenn das Programm z. B. eine Datei auf dem Clientrechner abspeichern will, wird der Anwender zuerst gefragt, ob er diese Aktion auch wirklich zulassen will. Erst wenn der Anwender diese Abfrage bestätigt, wird das Programm fortgeführt.

Die Api für die Klassen findest du hier: JNLP API Reference 1.5 Wie du diese anwenden kannst unter JNLP API Examples

2. Über eine Signierung der jar-Datei Durch das Signieren der jar-Datei und durch den Zusatz

<security>
   <all-permissions/>
</security>
in der jnlp-Datei wird die Sandbox-Funktion ausgeschaltet.

Der Anwender wird beim Programmstart gefragt, ob er dem Zertifikat vertraut. Wenn er zustimmt, startet das Programm mit vollen Zugriffsrechten (zumindest denen, die auch der Anwender hat (Glaube ich zumindest)).

Link: Signing and Verifying JAR Files (The Java™ Tutorials > Deployment > Packaging Programs in JAR Files)

Für Privatpersonen und kleine Firmen ist die Signierung mit einem selbsterstelltem Zertifikat wohl die beste Lösung.


Ich weiß nicht welchen dieser beiden Wege du gehen willst. Wenn du den ersteren gehst, musst du dich mit der API auseinandersetzen und dein Programm an den enstprechenden Stellen abändern.

Wenn du dich für den zweiten Weg entscheidest kannst du dich an folgende Anleitung halten. Und vergiss nicht den Zusatz in der jnlp-Datei.

Sämtliche Befehle werden in die Konsole (= Eingabeaufforderung) eingegeben.
Betriebsystem Windows XP.

Wechsel in das Verzeichnis:
C:\Programme\Java\jdk1.6.xxx\bin
(Beispiel Befehl: cd C:\Programme\Java\jdk1.6.0_18\bin)

Zuerst muß ein Schlüsselpaar erzeugt und verwaltet werden.
Dazu muß folgendes in die Konsole eingegeben werden:
keytool -genkey -keystore TestTresor -alias Testschluessel

Mit -genkey generiert man das Schlüsselpaar,
mit -keystore XXX wird eine Schlüsseldatenbank mit dem Namen XXX erzeugt (falls noch nicht vorhanden), in dem das Schlüsselpaar verwaltet wird und
mit -alias YYY gibt man diesem Schlüsselpaar den Namen YYY.

Das Programm fragt zusätzlich noch nach einem Passwort, mit dem man den Keystore sichern möchte. Alle Passwörter müssen mindestens 6 Zeichen lang sein.
Die Passworteingabe ist unsichtbar, d. h. man sieht weder welche Zeichen man eingibt, noch wie viele.
Das Programm fragt noch diverse Dinge wie Namen, Land etc. ab. Diese müssen meines Wissens nicht unbedingt ausgefüllt werden.
Das Programm fragt, ob die Eingaben korrekt sind.
Mit „ja“ bestätigen. (Also „ja“ eingeben.)
Passwort für das Schlüsselpaar: Betätigung der Eingabetaste
Dadurch wird das selbe Passwort für das Schlüsselpaar wie für den Keystore verwendet. (Ist am einfachsten.)

Jetzt muß man ein selbstsigniertes Zertifikat erstellen:
keytool -selfcert -validity 1825 -keystore TestTresor -alias Testschluessel

Mit -selfcert erzeugt man ein selbstsigniertes Zertifikat,
mit -validity 1825 verpaßt man dem Zertifikat eine Gültigkeitsdauer von 5 Jahren (365 Tage x 5),
mit -keystore XXX gibt man an aus welcher Schlüsseldatenbank das Schlüsselpaar genommen werden soll und
mit -alias YYY gibt man den Namen des Schlüsselpaares an.

Das Programm fragt noch das Passwort für den Keystore ab.

Jetzt kann man mit dem selbssignierten Zertifikat das Java-Programm signieren:
jarsigner -keystore TestTresor <Pfad zum Programm> Testschluessel

Mit -keystore XXX gibt man die Schlüsseldatenbank an,
mit <Pfad zum Programm> gibt man die zu signierende jar-Datei an (Hier muß der komplette Pfad angegeben werden, also z. B. C:\Test\Versuch\IchbindasProgramm.jar (ohne die <>)) und
am Schluß gibt man noch den Namen des Schlüsselpaares an.

Das Programm fragt noch das Passwort für den Keystore ab.

Die jar-Datei ist nun signiert und kann nun für Java Web Start verwendet werden.

Zusätzliches:
Die Schlüsseldatenbank wird im Ordner C:\Programme\Java\jdk1.6.xxx\bin\ als Datei angelegt.

-- hansmueller 05.03.2010