Zertifikate für JAVA

Manche JAVA-Applets oder -Anwendungen benötigen für ihre Funktion besondere Rechte
auf dem Client-Rechner.
Die Rechte sind mit jeder neuen JAVA-Version aus Sicherheits-Gründen eingeschränkt worden.

Der Anwender kann diese Rechte durch die Installation eines entsprechenden Zertifikats erteilen.
Ursprünglich wurden sämtliche mit einem Zertifikat versehenen Applets als vertrauenswürdig eingestuft.

Die Zertifikate können von einer offiziellen Zertifizierungsstelle stammen oder
selbst erzeugt werden.

Mit Hilfe von Tools aus dem Java Development Kit (JDK) kann man Zertifikate selbst erzeugen.
Es wird ein Schlüssel erzeugt und in ein Zertifikat exportiert.
Die Applets werden zu einem Jar-Archiv gepackt und
dieses wird anschließend mit dem Schlüssel signiert.

Erstellung eines eigenen Zertifikats mit dem JDK

Für das Zertifikat muss zunächst ein Schlüssel generiert werden:
keytool -genkey -keyalg rsa -alias meinKey -validity 3600
meinKeyist dabei ein beliebiger Name für den Schlüssel.
3600sind die Anzahl der Tage für die Gültigkeit des Zertifikats (also rund 10 Jahre).

Neben den Kennworten für den Schlüsselspeicher und den Schlüssel werden folgende Daten abgefragt:

C:\Java>keytool -genkey -keyalg rsa -alias meinKey -validity 3600
Keystore-Kennwort eingeben:
Wie lautet Ihr Vor- und Nachname?
  [Unknown]:  Max Mustermann
Wie lautet der Name Ihrer organisatorischen Einheit?
  [Unknown]:  EDV-Abteilung
Wie lautet der Name Ihrer Organisation?
  [Unknown]:  Musterfirma GmbH
Wie lautet der Name Ihrer Stadt oder Gemeinde?
  [Unknown]:  Stuttgart
Wie lautet der Name Ihres Bundeslands?
  [Unknown]:  Baden-Wuerttemberg
Wie lautet der Ländercode (zwei Buchstaben) für diese Einheit?
  [Unknown]:  de
Ist CN=Max Mustermann, OU=EDV-Abteilung, O=Musterfirma GmbH, L=Stuttgart, ST=Bad
en-Wuerttemberg, C=de richtig?
  [Nein]:  Ja

Schlüsselkennwort für <meinKey> eingeben
        (RETURN, wenn identisch mit Keystore-Kennwort):

Anschließend wird aus diesem Schlüssel (alias) die Zertifikatsdatei im aktuellen Verzeichnis erzeugt:
keytool -export -alias meinKey -file meinZertifikat.crt

C:\Java>keytool -export -alias meinKey -file meinZertifikat.crt
Keystore-Kennwort eingeben:
Zertifikat in Datei <meinZertifikat.crt> gespeichert

Die DateimeinZertifikat.crtmuss dem Anwender zur Installation bereitgestellt werden.

Den Inhalt des Zertifikats kann man sich anzeigen lassen:
keytool -printcert -v -file meinZertifikat.crt

C:\Java>keytool -printcert -v -file meinZertifikat.crt
Eigentümer: CN=Max Mustermann, OU=EDV-Abteilung, O=Musterfirma GmbH, L=Stuttgart
, ST=Baden-Wuerttemberg, C=de
Aussteller: CN=Max Mustermann, OU=EDV-Abteilung, O=Musterfirma GmbH, L=Stuttgart
, ST=Baden-Wuerttemberg, C=de
Seriennummer: 267555d7
Gültig von: Sun May 12 12:45:45 CEST 2013 bis: Tue Mar 21 11:45:45 CET 2023
Zertifikat-Fingerprints:
         MD5:  C6:4F:1C:31:76:00:83:12:43:2C:24:AC:BA:90:2C:06
         SHA1: A0:EC:80:1C:55:C3:A3:E7:82:5E:D9:3A:29:8E:1C:7A:87:8F:88:FB
         SHA256: 8F:2A:8B:5F:84:22:96:1A:0C:B3:CE:63:CD:7F:77:43:48:6D:00:C8:E4:
E9:0E:3D:0A:81:6B:59:0F:F6:E3:94
         Signaturalgorithmusname: SHA256withRSA
         Version: 3

Erweiterungen:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 39 13 09 E3 42 8D 87 E4   CD F6 73 88 26 88 4C A5  9...B.....s.&.L.
0010: E6 92 BE C5                                        ....
]
]

Die erzeugten Schlüssel zeigt der folgende Befehl:
keytool -list

C:\Java>keytool -list
Keystore-Kennwort eingeben:

Keystore-Typ: JKS
Keystore-Provider: SUN

Keystore enthält 1 Eintrag

meinkey, 12.05.2013, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): A0:EC:80:1C:55:C3:A3:E7:82:5E:D9:3A:29:8E:1C:7A:8
7:8F:88:FB

Den erzeugten Schlüssel löscht der folgende Befehl:
keytool -delete -alias meinkey

C:\Java>keytool -delete -alias meinkey
Keystore-Kennwort eingeben:

Erstellung eines Jar-Archivs

Die Class-Datei des Applets muss zum Signieren zunächst in ein Jar-Archiv gepackt werden:
jar cf JavaVersion.jar JavaVersion.class
Es lassen sich auch mehrere Class-Dateien mit weiteren Dateien und Unterverzeichnissen
zu einem Jar-Archiv packen.
jar cf test.jar test*.class
Die Verwendung einer Manifest-Datei zum Festlegen der Startoptionen kann dann sinnvoll sein.

Signieren des Jar-Archivs mit dem Schlüssel

Das erstellte Jar-Archiv wird dem Schlüssel versehen:
jarsigner JavaVersion.jar meinkey

C:\Java>jarsigner JavaVersion.jar meinkey
Enter Passphrase for keystore:

Die Signatur des Jar-Archivs kann man kontrollieren:
jarsigner -verify -verbose -certs JavaVersion.jar

C:\Java>jarsigner -verify -verbose -certs JavaVersion.jar


s k      157 Sun May 12 12:55:24 CEST 2013 META-INF/MANIFEST.MF

      X.509, CN=Max Mustermann, OU=EDV-Abteilung, O=Musterfirma GmbH, L=Stuttgar
t, ST=Baden-Wuerttemberg, C=de (meinkey)
      [certificate is valid from 12.05.13 12:45 to 21.03.23 11:45]

         319 Sun May 12 12:55:26 CEST 2013 META-INF/MEINKEY.SF
        1464 Sun May 12 12:55:26 CEST 2013 META-INF/MEINKEY.RSA
           0 Sun May 12 12:54:44 CEST 2013 META-INF/
smk      833 Tue May 03 16:38:40 CEST 2011 JavaVersion.class

      X.509, CN=Max Mustermann, OU=EDV-Abteilung, O=Musterfirma GmbH, L=Stuttgar
t, ST=Baden-Wuerttemberg, C=de (meinkey)
      [certificate is valid from 12.05.13 12:45 to 21.03.23 11:45]


  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 verified.

Download eines Zertifikats

Das Zertifikat kann auf einer Webseite über einen Link zum Download durch den Anwender
auf dessen Rechner bereitgestellt werden:
<a href="meinZertifikat.crt">Download des Zertifikats</a>
Der Anwender öffnet das Zertifikat und klickt die "Zertifikat installieren"-Schaltfläche an.

Zertifikate im MS Internet Explorer

Die installierten Zertifikate findet man im MS Internet Explorer 10 über das Menü "Extras"
im Menüpunkt "Internetoptionen".

Im Register "Inhalte" befindet sich die Schaltfläche "Zertifikate".

Das installierte Zertifikat (Max Mustermann) wird im Register "Zwischenzertifizierungsstellen" angezeigt.

Einbinden des signierten Jar-Archivs in eine Webseite

Das signierte Jar-Archiv kann mit einem Applet-Tag in eine Webseite integriert werden:

<applet code="JavaVersion.class" archive="JavaVersion.jar" width="500" height="150">
<br />
Bitte aktivieren Sie JAVA in Ihrem Browser.
</applet>