Jak podepisovat Java aplikace a applety

17.04.2018 | Jindřich Zechmeister

Java wird als wenig vertrauenswürdige Plattform betrachtet. Sie hat nach wie vor Probleme mit einer großen Anzahl von Schwachstellen, und die Signierung einer Java-Anwendung oder eines Applets ist absolut entscheidend für das Vertrauen des Endnutzers.

Wozu dienen Zertifikate für die Signierung von Anwendungen

Wie andere Zertifikate dienen auch Code-Signing-Zertifikate der Erhöhung der Sicherheit; sie werden jedoch nicht für die Kommunikation zwischen Browser und Server verwendet, sondern zur digitalen Signierung von Anwendungen. Die Verwendung eines Zertifikats ähnelt der eines elektronischen Signatur, wie wir sie aus der E-Mail-Kommunikation kennen.

Die Hauptbedeutung der Code-Signierung ist wie folgt:

  1. Nachweis der Herkunft der Anwendung und der Identität des Herausgebers
  2. Nachweis der Unversehrtheit des Codes während der Übertragung zum Benutzer

Wie bei einer elektronischen Signatur muss die Identität des Herausgebers nachgewiesen werden, damit wir sicher sein können, dass die Software nicht aus einer unzuverlässigen Quelle stammt. Ebenso wichtig ist die Kontrolle der Datenintegrität, also deren Vollständigkeit und Unveränderlichkeit. Durch die digitale Signatur der Anwendung können wir sicherstellen, dass niemand die Anwendung nach der Veröffentlichung verändert hat. Für die Benutzer Ihrer Anwendung ist die Signatur eine Garantie, dass das Programm von Ihnen stammt und nach der Veröffentlichung nicht verändert wurde.

Was ist der Vorteil eines Code-Signing-Zertifikats für Java?

Ich habe die allgemeinen Eigenschaften und Vorteile des Code-Signature-Zertifikats erwähnt. Neben den oben genannten Vorteilen ermöglicht Ihnen das Zertifikat für die Signierung von Java-Anwendungen:

  • Signierung von Jar-Dateien für Desktop-Plattformen.
  • Verwendung des Hash-Algorithmus Secure Hash Algorithm SHA-1 und optional des fortschrittlicheren SHA-2.
  • Kompatibilität mit der Runtime Environment (JRE).
  • Der Benutzer wird über die Herkunft und Sicherheit des Codes aufgeklärt, und es hilft, die Anzahl der Warnmeldungen zu reduzieren

Java wird als wenig vertrauenswürdige Plattform angesehen. Es gibt immer noch Probleme mit einer Vielzahl von Sicherheitslücken, sodass die Signierung von Java-Anwendungen oder -Applets für das Vertrauen des Endbenutzers absolut unerlässlich ist.

Wie beantragt man ein Zertifikat für Java?

Neben der Bestellung des Code-Signature-Zertifikats bei SSLmarket müssen auch kryptografische Aspekte wie CSR-Request und Private-Key gelöst werden.

Nach der Signierung von Java-Anwendungen und -Applets benötigen Sie das von Oracle bereitgestellte JDK (Java Development Kit). Für die Arbeit mit dem Zertifikat und das Signieren benötigen Sie die Programme keytool, jar und jarsigner aus diesem Paket.

Erstellung eines Keystore und eines privaten Schlüssels

Vor der Erstellung des Zertifikatsantrags, der ein öffentlicher Schlüssel ist, müssen Sie Ihren privaten Schlüssel erstellen. Dies geschieht mit dem Befehl:

keytool -genkey -keyalg rsa -keystore -alias -keysize 3072

Der Keystore fordert Sie auf, ihn zu benennen, einen Alias und ein Passwort für den Keystore zu erstellen. Es wird auch nach dem Namen Ihrer Firma gefragt.

Das Schlüsselpaar wird nach der Erstellung im Keystore gespeichert, und der private Schlüssel darf auf keinen Fall weitergegeben werden.

Nun erstellen Sie den CSR-Request, der für die Bestellung des Zertifikats erforderlich ist. Sie werden aufgefordert, ergänzende Informationen anzugeben.

keytool -certreq -file certreq.csr -keystore -alias

Den erstellten CSR-Request fügen Sie in die Bestellung für das Code-Signing-Zertifikat bei SSLmarket ein.

Wie man mit einem Zertifikat signiert

Import des Zertifikats in den Keystore

Nachdem die Zertifizierungsstelle Ihr Unternehmen verifiziert hat, wird das Zertifikat ausgestellt, und Sie erhalten es per E-Mail von SSLmarket. Vor der Verwendung müssen Sie es mit dem Befehl in Ihren Keystore importieren:

keytool -import -trustcacerts -keystore -alias -file cert.p7b

Der importierte P7B-Datei ist nicht das von uns gesendete Zwischenzertifikat. Es ist notwendig, das SSL-Zertifikat von SSLmarket aus dem PEM-Format (Base64) in das PKCS#7-Format, also P7B, zu konvertieren und dann mit dem Zwischenzertifikat zu importieren.

Signieren von Anwendungen und Applets

Zum Signieren der Jar-Datei verwenden Sie die Anwendung jarsigner.

jarsigner -keystore

Das Zeitstempel (timestamp) wird mit dem Befehl hinzugefügt:

jarsigner -tsa https://timestamp.geotrust.com/tsa -keystore

Beim Signieren werden Sie aufgefordert, das Keystore-Passwort einzugeben, das Sie bei der Erstellung festgelegt haben.

Überprüfung der Signatur

Sicherlich möchten Sie Ihre neue Signatur überprüfen. Dies können Sie mit dem Befehl tun:

jarsigner -verify -verbose -certs C:TestApplet.jar

Wenn alles in Ordnung ist, können Sie die signierte Anwendung im Internet veröffentlichen und sie den Benutzern zugänglich machen. Wenn Ihr Java-Programm oder Applet heruntergeladen wird, zeigt ihre Java Runtime Environment ihre digitale ID aus der Signatur an.

Weitere Informationen finden Sie in der Dokumentation

Dieser Artikel dient als schnelle Orientierung zur Signierung von Java-Anwendungen. Es wird empfohlen, die vollständige Dokumentation von Oracle zu studieren, die das gesamte Thema der Signierung von Java-Anwendungen und -Applets abdeckt. Diese finden Sie auf der Website The Java Tutorials.


Ing. Jindřich Zechmeister
Specialista pro bezpečnostní SSL certifikáty
Certifikovaný Symantec Sales Expert Plus 
e-mail: jindrich.zechmeister(at)zoner.cz