In jedem Java JDK ist innerhalb des bin Verzeichnisses, das Komandozeilentool keytool zu finden. Mit diesem Tool kannst du jederzeit auf sogenannte Keystore im Format PKCS#12 oder JKS lesend und schreibend zugreifen. Oder auch ein neuen Keystore erstellen.
PKCS steht für Public Key Cryptography Standard die # 12 steht für den zu verwendeten Standard, hier also 12. Interessante Details kann man in der passenden RFC 7292 nachlesen.
JKS steht für Java Key Store. In deinem Java JDK Verzeichnis liegt eine Datei mit dem Namen cacerts die als Beispiel für eine JKS Datei steht. Ihr könnt euch die dort abgelegten Zertifikate auflisten lassen in dem ihr euch zu dem Ordner an der Kommandozeile bewegt und dort keytool mit den folgenden Parametern aufruft:
keytool -list -keystore cacerts
Als Ergebnis erhalte ich auf meinem Rechner 151 Einträge(Zertifikate und Keys). Das Programm keytool kann aber merklich mehr als nur vorhanden Keystore und deren Inhalt auflisten. Der Befehl keytool -genkeys erstellt Schlüsselpaare(private und public) allerdings solltest du diesen Befehl noch mehr Daten zur Verfügung stellen. Folgender Befehl kann per Copy und Paste eingesetzt werden:
keytool -genkeypair -alias beispiel -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -dname „cn=beispiel.com,ou=beispiel,dc=beispiel,dc=com“ -keypass changeit -startdate „2023/01/31 00:00:00“ -validity 365 -storetype PKCS12 -storepass changeit -keystore beispiel.p12
-alias <alias>
Alias-Name für den neuen Schlüssel. In dem o.g. Beispiel beispiel
-keyalg <algorithm>
Algorithmus für den Schlüssel, z. B. RSA oder DSA. Hier ist es RSA
-keysize <size>
Größe des Schlüssels in Bit. Oben wurde 4096 Bit
-sigalg
Signaturalgorythmus für das Zertifikat. Normalerweise SHA256withRSA
-validity <valDays>
Gültigkeitsdauer des Zertifikats in Tagen. In dem o.g. Beispiel sind es 365 Tagen.
-keypass <keypass>
Passwort für den privaten Schlüssel.
-storepass <storepass>
Passwort für den Schlüsselspeicher. Also der Datei beispiel.p12 als Keystore siehe unten unter den Parameter -keystore
-dname <dname>
DN (Distinguished Name) für das Zertifikat, z. B. CN=John Doe, O=Acme Inc, C=US. Diese Daten werden für das Zertifikat verwendet. Also Verantwortlicher, Firmenbezeichnung und Ort der Firma.
-keystore <keystore>
Pfad und Name des Schlüsselspeicher.
Es wird ein Keystore im Format PKCS#12 erstellt mit dem Namen beispiel.p12. Außerdem enthält der o.g. Befehl das Passwort changit und die Gültigkeit von einem Jahr ab dem 31.01.2023 gerechnet. Der Aliasname, hier beispiel wird verwendet um die keys in dem Keystore zu unterscheiden. Könnt ihr gerne mal ausprobieren, indem Ihr einfach den Befehl erneut ausführt, allerding mit einem unterschiedlichen Aliasnamen (z.B. beispiel1). Wenn ihr euch dann den Keystoreinhalt mit dem o.g. keytool -list -keystore beispiel.p12 anzeigen last, werden ihr 2 unterschiedliche Einträge antreffen.
Spring Boot und Https
Mit dem oben aufgeführten Wissen, können wir uns jetzt an die Spring Bott https Konfiguration heranmachen. In der applications.properties Datei, tragen wir die folgenden Einträge(properties) ein:
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:beispiel.p12
server.ssl.key-store-password=changeit
server.ssl.key-alias=beispiel
#Http/2 einschalten
server.http2.enabled=true
Die Einträge habe ich den o.g. keytool -genkeypair Beispiel entnommen. D.h. das Passwort sowie der allias und der erstellten p12 Datei, werden dort eingetragen. Der Type des Keystore ist hier PKCS12. Es sollten auch JKS Keystore funktionieren, wurden hier aber noch nicht getestet. Die letzte Propertie ist für das einschalten von http/2. Ist kein https eingeschaltet, wird die Propertie ignoriert.
0 Kommentare