Skip to content

Lösung Java 8 Fehler - Certificate has been revoked - Zertifikat wurde entzogen

Im April läuft die Unterstützung für Java 7 aus, somit wird es langsam aber sicher Zeit auf Java 8 umzusteigen. Die neue Version 8 bringt bessere Sicherheitsmechanismen mit, welche bei Anwendungen, die auf HTTPS und somit auf Zertifikate setzen zu Fehlern führen können. Einer davon ist die Zurückweisung des Zertifikats:

 java.security.cert.CertificateRevokedException: Certificate has been revoked, reason: SUPERSEDED, revocation date: XXXXX CET 2014, authority: CN=TC TrustCenter Class 2 CA II, OU=TC TrustCenter Class 2 CA, O=TC TrustCenter GmbH, C=DE, extension OIDs: [2.5.XX.21]

at com.sun.deploy.security.RevocationChecker.checkApprovedCRLs(Unknown Source)

at com.sun.deploy.security.RevocationChecker.checkCRLs(Unknown Source)

at com.sun.deploy.security.RevocationChecker.check(Unknown Source)

at com.sun.deploy.security.TrustDecider.checkRevocationStatus(Unknown Source)

at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)

at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)

at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)

at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)

........

Java8-AnwendungzurSicherheitblockiert

Erklärung 

CRL 

Dabei handelt es sich um eine Zertifikatsperrliste (Certificate Revoke List -->CRL), diese wird von einer Zertifizierungsstelle geführt und enthält die Seriennummer ungültiger Zertifikate. Diese sind mit einem Zeitstempel versehen und einer Signatur geschützt. Voraussetzung für eine Prüfung durch diesen Sicherheitsmechanismus ist eine aktive Internetverbindung.

In diesem Beispiel trat dieser Fehler auf.

OCSP

Ein weiterer Schutz der unter Java 8 aktiv ist nennt sich Online Certificate Status Protocol. Dabei handelt es sich um ein Netzwerkprotokoll, das ebenfalls bei einem CA Dienst (OCSP-Responder) nach der Gültigkeit eines Zertifikats fragt. 

Sicherheitsprüfungen für Zertifikate in Java 8 ausschalten

Bei selbst signierten oder anderweitig verwendeten Zertifikaten können diese Prüfungen ausgeschaltet, bzw. eingeschränkt werden. Denn bei einer Test- oder Intranetanwendung ist es nicht immer sinnvoll die Gültigkeit bei einer CA zu überprüfen.

Darum lassen sich in den Java Einstellungen ("Systemsteuerung/Java/Erweitert") CPL und OCSP deaktivieren.

java8-sicherheit

Bei dieser Einstellung wird die Prüfung nicht komplett deaktiviert, sondern auf Zertifikate des Anbieters, also des Softwareherstellers beschränkt. Das heißt, bei selbst signierten Zertifikaten dürfte nun kein Fehler seitens Java angezeigt werden, wenn die gewünschte URL auf der Whitelist ist oder dem eigenen Zertifikat vertraut wird.

Natürlich lassen sich CRL und OCSP auch komplett deaktivieren. Die Einstellungen sind dann wie folgt.

java8-sicherheit-zertifikate

P.S. Im selben Menü könnt im gleichen Zug weiter unten die Protokolle SSL 3.0 und TLS 1.0 deaktivieren.

Android Studio in Ubuntu 14.04 oder Elementary OS installieren

Android Apps lassen sich auf diverse Arten programmieren. Viele nutzten in der Vergangenheit Eclipse bzw. das Android SDK zur Anwendungsentwicklung. 

Seit einiger Zeit bietet Google mit Android Studio eine Alternativumgebung an. Diese ist zwar noch in einer frühen Entwicklungsphase (0.8.0) läuft dennoch schon stabil und kann für die App Entwicklung gut verwendet werden. Die Plattform lässt sich  auf Windows und Ubuntu installieren und setzt die Installation von Java voraus.

android-studio

Android Studio in Ubuntu installieren

sudo add-apt-repository ppa:paolorotolo/android-studio

sudo apt-get update

sudo apt-get install android-studio

Aktuelle Versionen können jederzeit über das Programm selbst geladen werden. Siehe Screenshot. 

Oracle Java 7 installieren

Das Android Studio setzt Java voraus. Dieses muss mindestens Version 7 haben. Google empfiehlt Oracle Java aus Performance und UI Gründen. Das Programm funktioniert jedoch auch mit der Alternative OpenJDK.

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java7-installer

OpenJDK 7 installieren

sudo apt-get install openjdk-7-jdk openjdk-7-source openjdk-7-jre-headless openjdk-7-jre-lib icedtea-7-plugin

Java Version wechseln

Ist bereits eine alte Java Version installiert, muss dem System mitgeteilt werden, dass eine neuere vorhanden ist, sonst startet Android Studio nicht und bringt eine Fehlermeldung.

java-error-android-studio

Zunächst wird geprüft welche Versionen auf dem System installiert sind, um dann auf eine aktuelle zu wechseln. 

sudo update-java-alternatives -l

java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64

java-1.7.0-openjdk-amd64 1051 /usr/lib/jvm/java-1.7.0-openjdk-amd64

sudo update-java-alternatives -s java-1.7.0-openjdk-amd64

oder eben für Oracle

sudo update-java-alternatives -s java-7-oracle

9 praktische Keytool Befehle - Zertifikatsmanagement unter Java

Das leidige Thema Zertifikate hatte ich auf dem Blog nun schon öfters, vielleicht erinnert ihr euch ja noch an das selbstsignierte Tomcat Zertifikat.

Damals wurde anders als bei der klassischen Variante mit Apache/OpenSSL auf Keytool zurückgegriffen. Sozusagen das Pendant unter Java.

Heut möchte ich euch ein paar weitere praktische Befehle dazu zeigen. Zunächst muss das Keytool aber gefunden werden.

Unter Windows befindet es sich meist im Bin-Ordner der Java Installation, beispielsweise "C:\Program Files\Java\jre7\bin"

Unter Linux genügt ein einfaches "whereis keytool", um den gewünschten Pfad, beispielsweise "/usr/bin/keytool" zu finden.

9 praktische Keytool Befehle

Einen Keystore und ein Schlüsselpaar erzeugen

keytool -genkey -alias domain -keyalg RSA -keystore keystore -keysize 2048

Eine Zertifikatsanfrage erstellen

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

Ein signiertes Zertifikat in den Keystore importieren

keytool -import -trustcacerts -alias domain -file domain.crt -keystore keystore

Ein vorhandenes Zertifikat exportieren

keytool -export -alias meincert -file meinexportiertescert.crt -keystore keystore

Ein selbstsigniertes Zertifikat erstellen

keytool -genkey -keyalg RSA -alias selfsigned -validity 3600 -keysize 2048

Ein Vorhandenes Zertifikat auslesen 

keytool -printcert -v -file meincert.crt

Welche Zertifikate befinden sich im Keystore?

keytool -list -v -keystore keystore

Liste die vertraulichen CAs auf

keytool -list -keystore "C:\Program Files\...\...\lib\security\cacerts"

Lösche ein Zertifikat aus dem Keystore

keytool -delete -alias domain -keystore keystore

Tomcat Server - selbstsigniertes SSL Zertifikat erstellen

Heute mal wieder etwas zum Thema Zertifikate. Hatten wir in letzter Zeit zwar schon öfters, siehe Zertifikat auslesen oder selbst signiertes Zertifikat erstellen. Um Letzteres soll es heute ebenfalls gehen. Der Unterschied ist allerdings, das es heute um eine Tomcat SSL Zertifikat in einer Windows Umgebung gehen soll. 

Der Vorgang funktioniert natürlich ebenfalls unter Linux in ähnlicher Weise, lediglich die Pfade sind andere.

Tomcat - selbstsigniertes SSL Zertifikat erstellen

Als erstes Schritt wird eine Konsole geöffnet (CMD). Als nächstes muss der Pfad der Java Installation gesucht werden. Im Normalfall ist das sowas wie:

C:\Program Files\Java\jdk1.7.0_51\bin oder

C:\Program Files \Java\jre7\bin

Solltet ihr den Pfad nicht finden, könnt ihr auch einfach nach der Datei "keytool.exe" suchen.

java-pfad

Sobald der Pfad gefunden ist, muss nur noch ein langer Befehl mit dem Keytool aufgerufen und danach die richtigen Werte hinterlegt werden.

  • keyalg RSA - Verschlüsselungsart
  • alias selfsigned - Selbstsigniertes Zertifikat
  • validity 3600  - Gültigkeit 10 Jahre
  • keysize 2048 - Schlüsselänge 2048

keytool -genkey -keyalg RSA -alias selfsigned -validity 3600 -keysize 2048

zertifikat-tomcat

Bei der Abfrage müssen die üblichen Werte hinterlegt werden. Am wichtigsten ist wie immer der CN Name, der hier als "First and Last Name abgefragt wird. Auch ein Passwort für den Keystore sollte hinterlegt werden, um diesen besser zu schützen.

Enter keystore password:

What is your first and last name?

  [Unknown]: 127.0.0.1

What is the name of your organizational unit?

  [Unknown]:

What is the name of your organization?

  [Unknown]:  Blog

What is the name of your City or Locality?

  [Unknown]:  Leipzig

What is the name of your State or Province?

  [Unknown]:

What is the two-letter country code for this unit?

  [Unknown]:  DE

Is CN=127.0.0.1, OU=Unknown, O=Blog, L=Leipzig, ST=Unknown, C=DE correct?

  [no]:  yes

Enter key password for <selfsigned>

        (RETURN if same as keystore password):

Re-enter new password:

In der Standardeinstellung wird der Keystore in eurem Benutzer Ordner abgelegt. Hier kann er im Prinzip auch liegen bleiben.

"C:\Users\Name\.keystore" 

Das Gröbste ist jetzt erledigt. Nun muss nur noch dem Tomcat Server mitgeteilt werden, dass er SSL verwenden soll. Hierzu muss die Server.xml editiert werden. Sie befindet sich im Normalfall unter

"C:\Tomcat-Installation\conf\server.xml" 

Habt ihr die Datei gefunden, müsst ihr nur den passenden Bereich freischalten und schon sollte euer Server unter https://127.0.0.1:8443 erreichbar sein.

<Connector port="8443" maxHttpHeaderSize="8192"

                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                   enableLookups="false" disableUploadTimeout="true"

                   acceptCount="100" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS" SSLEnabled="true"

                   URIEncoding="UTF-8" keystorePass="xxx"

  keystoreFile="C:\Users\Username\.keystore"/>

zertifikat-tomcat-erstellen

Zum Schluss muss noch der Tomcat Dienst neu gestartet werden und eure Installation ist unter HTTPS erreichbar.

Java ist auch eine Insel - Kultbuch umsonst lesen

Das Programmierer Handbuch "Java ist auch eine Insel" ist in der 10. Auflage erschienen. Die neue Ausgabe kann mit Java 7 umgehen und richtet sich an Einsteiger, Umsteiger, Studenten oder Interessierte. Auf über 1000 Seiten wir die Programmiersprache Java vom Autor Christian Ullenboom einfach und praxisorientiert vermittelt. Dazu gibt es viele Codebeispiele und eine Einführung in Werkzeuge wie Eclipse oder JDK.

java-ist-auch-eine-insel

Galileo Computing bietet diesen Klassiker netterweise als OpenBook an, das heißt es kann komplett online gelesen werden. Wem das nicht ausreicht, der hat die Möglichkeit das komplette Buch als ZIP Archiv herunterzuladen und offline zu lesen. Das sollte als Wochenendlektüre eigentlich ausreichen ;)