Wie signiert man ein Java Archiv/Applet?

Applets unterliegen normalerweise strikten Sicherheitsbestimmungen, sodass sie von einem lokalen Rechner weder Dateien lesen noch schreiben oder gar andere Programme starten dürfen. Ebenso wenig dürfen sie die angeschlossene Hardware ansprechen. Jeglicher Versuch, gegen diese Bestimmungen zu verstoßen, endet in einer Exception.

Manchmal ist es jedoch nötig, einem Applet Zugriff auf einen Rechner zu gewähren, beispielsweise um für einen Authentifizierungsvorgang auf ein Kartenlesegerät zuzugreifen oder einen Text auszudrucken. Dies ist aus einem sicherheitstechnischen Blickwinkel heraus betrachtet natürlich höchst bedenklich, da man den Anbieter des Applets auf herkömmlichem Wege nicht identifizieren und insofern nicht entscheiden kann, ihm soweit zu vertrauen, seinem Applet die entsprechenden Rechte einzuräumen. Daher gibt es die Möglichkeit, Applets zu signieren, d.h. ein Applet (genauer: ein Jar-Archiv mit einem oder mehreren Applets) digital mit einem Zertifikat zu unterzeichnen und dadurch zu gewährleisten, dass es von einer bestimmten Person bzw. einem bestimmten Unternehmen stammt. Bestätigt wird dies durch so genannte CAs wie etwa VeriSign, Thawte oder auch der Deutschen Telekom AG. Diese Firmen bürgen jedoch nur für die Authentizität des Anbieters, nicht für die Unbedenklichkeit des Applets.

Screenshot: Vertrauensfrage der Runtime Environment

Ein signiertes Applet darf allerdings auch nicht ohne Zustimmung des Anwenders auf Dateien bzw. die Hardware zugreifen. Wird im Browser ein solches Applet aufgerufen, öffnet die Java Virtual Machine ein Fenster mit einigen Details über das Zertifikat und den Anbieter und der Frage, ob man diesem vertraut und dem Applet die entsprechenden Rechte erteilen möchte.

Zertifikate, die von weltweit bekannten Certification Authorities wie beispielsweise VeriSign ausgestellt worden sind, werden von jedem Browser akzeptiert und als solche erkannt. Jedoch sind die Kosten für ein solches Zertifikat recht hoch, so dass sie sich eigentlich nur dann lohnen, wenn eine Firma oder ein Kunde dafür aufkommt. Für Freizeit-Programmierer oder für die Entwicklung eines signierten Applets reicht es jedoch aus, sich mithilfe des Keytools des Java Development Kits selbst ein Zertifikat auszustellen. Da dieses jedoch selbstverständlich von keinem Browser erkannt wird, muss es — wenn der Endanwender das Zertifikat als vertrauenswürdig einstuft — zuerst installiert werden, damit der Browser bzw. die Virtual Machine das signierte Applet nicht wie ein unsigniertes behandelt.

Die folgenden Anweisungen zeigen nun, wie man sich ein eigenes Zertifikat erstellen und damit ein beliebiges Applet für Testzwecke signieren kann.

Zunächst erstellt man das Zertifikat bzw. ein RSA-Schlüsselpaar. Dazu wird die DOS-Eingabeaufforderung geöffnet und das Keytool aus dem Java SDK wiefolgt verwendet:

Listing 1: Generierung eines RSA-Schlüssels (meinKey) mit dem Java Keytool

keytool -genkey -keyalg rsa -alias meinKey

Beim Ausführen dieser Zeile erfolgt eine Abfrage des Keystore-Passwortes. Erscheint sie zum ersten Mal, ist noch kein Passwort vergeben und man kann frei eines wählen. Danach stellt das Keytool eine Reihe von Fragen wie Name, Organisation, Herkunftsland etc. Diese Angaben tauchen später auch wieder in dem nun zu erstellenden Zertifikat auf:

Listing 2: Erstellung eines Zertifikates (meinZertifikat)

keytool -export -alias meinKey -file meinZertifikat

Wer noch kein JAR-Archiv aus seinem Applet erstellt hat, sollte dies nun tun (siehe auch Wie erstellt man ein JAR-Archiv?). Der im nächsten Aufruf verwendete Jarsigner macht seinem Namen nämlich alle Ehre und signiert ausschließlich JAR-Dateien:

Listing 3: Signierung des JARs (meinApplet.jar) mithilfe des Jarsigners

jarsigner meinApplet.jar meinKey

Um die Signierung zu überprüfen, lässt sich der Jarsigner abermals mit veränderten Parametern verwenden:

Listing 4: Überprüfung der Signierung

jarsigner -verify -verbose -certs meinApplet.jar

Die Signatur des Applets ist damit abgeschlossen. Nun steht man allerdings vor dem Problem, dass das Applet von den Browsern nachwievor nicht als signiert erkannt wird. Dies liegt an der oben beschriebenen Unkenntnis des Browsers über den Aussteller des Zertifikats. Daher setzt man nun am besten auf der HTMLSeite mit dem Applet (oder einer beliebigen anderen) einen direkten Link auf das Zertifikat und klickt dieses an. Der folgende HTML-Code zeigt eine einfache Beispielseite mit Link auf "meinZertifikat.crt", welches im selben Ordner wie die HTML-Datei vorhanden sein muss:

Listing 5: HTML-Seite mit Link zum Download des Zertifikats

<html>

   <head>
      <title>Download des Zertifikats</title>
   </head>

   <body>
      <a href="meinZertifikat.crt">Installation des erforderlichen Zertifikats</a>
   </body>

</html>

Um das Packen eines Jar-Archives sowie den Vorgang der Signatur zu erleichtern, habe ich ein Programm namens »Jarkive« entwickelt. Näheres hierzu erfahren Sie auf der Jarkive-Webseite.



© 2004, 2005 Oliver Sonthof. Letzte Änderung: 31.07.2005. Alle Rechte vorbehalten.