Wie man Sun's Java security policy für Skins in DVD Profiler anpasst

English VersionEnglisch Version

Wenn Du Deinen Weg hierher gefunden hast, dann verwendest Du InterVocative's DVD Profiler, versuchst "Skins" zu verwenden die Dateien ausserhalb von DVD Profiler Lesen (und Schreiben) und siehst so etwas:

Error message

Weiter unten wirst Du die Lösung finden, wie man das Problem lösen kann.

Was hier beschrieben ist, wurde mit Sun's Java VM Versionen 1.4.2 und 1.5.0_02 getested. roolku's Skin funktioniert nicht mit der Version 1.5.0_01 (Mithirandir's Skin habe ich nicht damit gestestet).

Am Anfang, falls es interessiert, werde ich einige Grundlagen über das Problem und meine Suche nach der Lösung beschreiben. Anschließend folgt dann die Beschreibung wie das Problem behoben wird. Die Pfadangaben sind so dargestellt,wie sie auf meinem Computer zutreffen, Du musst sie dann gegebenenfalls so "übersetzen", wie sie auf Deinem Computer zutreffen.

DAS PROBLEM:

Ich nehme an, daß Du Windows XP Service Pack 1a installiert hast (ich verwende SP2, aber das macht hier keinen Unterschied). Die Bedeutung von 1a war, daß Microsoft aus rechtlichen Gründen ihre eigene Java Virtual Machine aus Windows entfernt haben. In SP1 war es noch vorhanden. Daher hat auch nicht jeder die obigen Probleme. Daher wäre eine andere Möglichkeit das Problem zu lösen, eine Installationsdatei der MS VM zu finden und zu installieren (nicht vergessen anschließend einen Update laufen zu lassen!). Da Microsoft aber ihre VM nicht mehr unterstützen, möchtest Du eventuell lieber an Sun's Java VM festhalten.

Wie ich bei meiner Suche festgestellt habe, erlaubt Java es nicht, daß "Applets" Aktionen auf dem Computer ausführen, die möglicherweise schädlich sein könnten. Daher sind Veränderungen am Dateisystem nicht zulässig. Da die genannten DVD Profiler Skins versuchen Dateien auf Deinem Computer zu lesen oder schreiben, erhalten wir die berüchtigten "Zugriff verweigert" Meldungen (in der Java Console; siehe oben) und es funktioniert erst Mal nicht.

DIE SUCHE:

Unter starkem Einsatz von Google habe ich eine ganze Menge Informationen zum Thema Java Sicherkeit gefunden. Am meisten natürlich direkt bei Sun's Java Technology (Default Policy Implementation and Policy File Syntax, Permissions in the JavaTM 2 SDK and Policy Tool - Policy File Creation and Management Tool -> Webseiten auf Englisch). Mit diesem Hintergrund schien mir die Lösung nahe. Ich nahm an ich bräuchte nur das Policytool (<JAVA-PFAD>\bin) verwenden und die java.policy Datei (<JAVA-HOME>\lib\security) anzupassen. Das hat aber noch nicht gleich funktioniert.

Ich fand schließlich heraus, das die oben erwähnte Datei java.policy nur vom Administrator Konto des Computers verwendet wird. Die Benutzer haben Ihre eigene java.policy im "Dokumente und Einstellungs" Bereich und sie hat einen leicht geänderten Namen:
C:\Dokumente und Einstellungen\Achim\.java.policy (beachte den Punkt vor java.policy!)
Die Datei von ihrem originalen Ordner zu kopieren und umzubenennen funktionierte allerdings nicht, da Windows dann nach einem, Dateinamen fragt (.java.policy wird lediglich als Dateierweiterung angesehen).

Nachdem ich das auch lösen konnte (ich zeige unten wie), musste ich nur noch Schritt für Schritt den Anweisungen folgen. Für jede Fehlermeldung in der Java Console habe ich eine Berechtigung gesetzt und dann abgewartet, was als nächstes auftauchte, wenn ich DVD Profiler startete. Insgesamt mussten 5 Berechtigungen gesetzt werden.

So, nun aber genug Vorgeplänkel, hier kommt's:

DIE LÖSUNG: (für eine "Abkürzung" hier klicken)

~~~~~~~DISCLAIMER~~~~~~~
(fühle mich einfach besser dies zu erwähnen)
DIE NACHFOLGENDEN EINSTELLUNGEN ERFOLGEN ZU DEINEM EIGENEN RISIKO. SIE FUNKTIONIEREN FÜR MICH, ABER SIE KÖNNTEN EIN SICHERHEITSRISIKO ODER ANDERE PROBLEME AUF DEINEM COMPUTER VERURSACHEN, FÜR DIE ICH KEINE VERANTWORTUNG ÜBERNEHME.
~~~~END OF DISCLAIMER~~~~

Im nachfolgenden Text verwende ich <JAVA-PFAD> um den Installationsordner der Runtime Umgebung zu repräsentieren. Je nach der verwendeten Version kann dies zutreffen:
1.4.2: C:\Programme\Java\j2re1.4.2_07
1.5.0: C:\Programme\Java\jre1.5.0_02

Öffne das Programm <JAVA-HOME>\bin\policytool.exe.

Beim ersten Start solltest Du die Meldung erhalten, daß die .java.policy Datei Deines Benutzer Kontos nicht gefunden wurde (es sei denn Du verwendest das Administrator Konto, dann kannst Du den ersten Schritt überspringen). Benutze Datei|Öffnen, um java.policy in <JAVA-PFAD>\lib\security zu finden und öffnen.

Policy Tool beim ersten Öffnen

Bevor Du irgendwelche Änderungen vornimmst, verwende Datei|Speichern Unter und speichere die Datei im Hauptverzeichnis Deines Benutzerkontos (C:\Documents and Settings\<USERNAME>). Denke daran den Punkt vor den Dateinamen zu setzen, bevor Du auf Speichern drückst! (Was der Explorer nicht zulässt, mit dem Policytool funktioniert es...) Du wirst nun mit der Meldung "Policy erfolgreich gespeichert unter..." begrüsst.

Im Fenster des Policytools findest Du zwei Einträge:
Codebase "file:${java.home}/lib/ext/*"
Codebase <ALL>
Den neuen Eintrag den wir nun erzeugen nennen zwar wir auch "Codebase <ALL>", aber es erscheint mir besser die neuen Einstellungen separat zu halten. Codebase bezieht sich auf den Ort wo der Code, der nun die Berechtigungen erhält, stehen kann. Ich habe es aber nicht hinbekommen, daß NUR die Skins im Ordner \DVD Profiler\skins die erlaubten Aktionen ausführen dürfen. Daher könnte im Prinzip JEDES Java Programm auf Deinem Programm von den gesetzten Berechtigungen profitieren. Andererseits sind die Erlaunisse relativ begrenzt.

Klicke nun auf "Richtlinieneintrag hinzufügen", um das entsprechende Fenster zu öffnen. (Wenn Du dies später nochmal bearbeiten willst, kannst Du einfach "Deinen" "Codebase <ALL>" Eintrag per Doppelklick öffnen oder ihn auswählen und dann "Policy Eintrag bearbeiten" klicken.)

Add Policy window

Die obere Hälfte des Fensters bleibt leer (wie schon erwähnt, ich weiss nicht was da reingehört, um die Berechtigungen auf die Skins zu beschränken). Fünf Berechtigungen müssen gesetzt werden. Jedes mal wenn Du auf "Berechtigung hinzufügen" drückst, erscheint ein neues Fenster.

Add New Permission window

Setze einfach die Informationen wie sie unten angegeben sind, eventuell musst Du die Pfadnamen anpassen, damit Sie zu Deinem System passen.

1. Berechtigung:
Wähle "RuntimePermission" in der Rubrik "Berechtigung" aus.
Wähle "modifyThreadGroup" in der Rubrik "Zielname" aus.
Mit "OK" bestätigen.

2. Berechtigung:
Wähle "RuntimePermission" in der Rubrik "Berechtigung" aus.
Wähle "modifyThread" in der Rubrik "Zielname" aus.
Mit "OK" bestätigen.

3. Berechtigung:
Wähle "FilePermission" in der Rubrik "Berechtigung" aus.
Gib auf der rechten Seite, neben "Zielname:", den Pfadnamen des IMAGES Ordners wie folgt ein:
C:\\Program Files\\InterVocative Software\\DVD Profiler\\IMAGES\\- (Der Bindestrich am Ende schließt all Unterordner mit ein.)
Gib die Worte "read" und "write", getrennt durch ein Komma, in das Feld neben "Aktionen" ein.
Diese berechtigung wird Applets (ALLEN Applets) erlauben, Dateien im IMAGES Ordner und allen Unterordnern zu lesenund zu schreiben.
Mit "OK" bestätigen.

4. Berechtigung (speziell für die Download Funktionen):
Wähle "SocketPermission" in der Rubrik "Berechtigung" aus.
Gib auf der rechten Seite, neben "Zielname:", "*" (Sternchen; ohne Anführungszeichen) ein.
Gib die Worte "connect", "listen" und "resolve", jeweils durch Komma getrennt, in das Feld neben "Aktionen" ein."
Mit "OK" bestätigen.

5. Berechtigung (speziell für Mithirandir's Skin):
Wähle "FilePermission" in der Rubrik "Berechtigung" aus.
Gib auf der rechten Seite, neben "Zielname:", den Pfadnamen des INFOS Ordner wie folgt ein:
C:\\Program Files\\InterVocative Software\\DVD Profiler\\data\\infos\\-
(Der Bindestrich am Ende schließt all Unterordner mit ein; obwohl das hier ja eigentlich nicht erforderlich ist...)
Gib die Worte "read" und "write", getrennt durch ein Komma, in das Feld neben "Aktionen" ein.
Diese berechtigung wird Applets (ALLEN Applets) erlauben, Dateien im \infos Ordner und allen Unterordnern zu lesenund zu schreiben.
Mit "OK" bestätigen.

So, das wär's dann auch schon. Nachdem Du die .java.policy gespeichert hast sollten die Skins wie gewünscht funktionieren.

FERTIG!

WICHTIG:
Du musst alle "class" Dateien, die von den Skin verwendet werden, in den <JAVA-HOME>\classes Ordner kopieren; solte der Ordner noch nicht bestehen, dann erstelle ihn. (roolku's class Dateien befinden sich ursprünglich in \roolku\java, Mithirandir hat Dich für seineSkin bereits angewiesen die Dateien korrekt zu platzieren.

Du brauchst nicht mehr roolku's dvdpro.bat verwenden, da Sun die CLASSPATH Zuweisung nicht unterstützt.

DIE ABKÜRZUNG:

Die Abkürzung... Ich nehme einfach Mal an, daß Du den obigen text "DIE LÖSUNG" gelesen hast und zumindest eine grobe Ahnung hast, was hier passiert (ODER Du denkst "Was der der ganze Unsinn, ich will einfach das die Skin funktioniert!"), dann kannst Du einfach meine Version der .java.policy herunterladen, in den Ordner C:\Dokumente und Einstellungen\<USERNAME> Ordner Deines Benutzerkontos kopieren und DVD Profiler starten.

Solltest Du noch Fragen haben oder irgendetwas in der obigen Beschreibung unklar ist, dann zögere nicht mich zu kontaktieren (meine e-mail Adresse findest Du entweder auf der Contact Seite oder in Nachrichten von mir im DVD Profiler Forum auf der InterVocative Webseite; meine Benutzername dort is ya_shin).

Viel Glück!