Kryptographie in Java. Keytool-Dienstprogramm

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des 10. Artikels "Java Keytool" von Jakob Jenkov aus einer Reihe von Artikeln für Anfänger , die die Grundlagen der Kryptographie in Java erlernen möchten.


Inhaltsverzeichnis:


  1. Java-Kryptographie
  2. Java-Chiffre
  3. Messagedigest
  4. Mac
  5. Unterschrift
  6. Schlüsselpaar
  7. Schlüsselgenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Zertifikat
  12. CertificateFactory
  13. CertPath

Keytool-Dienstprogramm


Java Keytool ist ein Befehlszeilenprogramm, mit dem Paare aus öffentlichen und privaten Schlüsseln generiert und in einem Schlüsselspeicher gespeichert werden können. Die ausführbare Datei des Dienstprogramms wird mit dem Java SDK (oder JRE) verteilt. Wenn Sie das SDK installiert haben, wird es ebenfalls vorinstalliert.
Die ausführbare Datei heißt keytool . Öffnen Sie zum Ausführen eine Eingabeaufforderung (cmd, Konsole, Shell usw.). und ändern Sie das aktuelle Verzeichnis in das Verzeichnis bin im Java SDK-Installationsverzeichnis. keytool und drücken Sie die Enter . Sie sollten etwas Ähnliches sehen:


 C:\Program Files\Java\jdk1.8.0_111\bin>keytool Key and Certificate Management Tool Commands: -certreq Generates a certificate request -changealias Changes an entry's alias -delete Deletes an entry -exportcert Exports certificate -genkeypair Generates a key pair -genseckey Generates a secret key -gencert Generates certificate from a certificate request -importcert Imports a certificate or a certificate chain -importpass Imports a password -importkeystore Imports one or all entries from another keystore -keypasswd Changes the key password of an entry -list Lists entries in a keystore -printcert Prints the content of a certificate -printcertreq Prints the content of a certificate request -printcrl Prints the content of a CRL file -storepasswd Changes the store password of a keystore Use "keytool -command_name -help" for usage of command_name C:\Program Files\Java\jdk1.8.0_111\bin> 

Wie Sie sehen können, unterstützt das Dienstprogramm keytool eine Reihe von Befehlen für die Arbeit mit Schlüsseln, Zertifikaten und Schlüsselspeichern. Diese Anleitung behandelt die am häufigsten verwendeten dieser Befehle.


Keytool-Skripte


Keytool Befehle enthalten viele Argumente, deren Installation schwer zu merken sein kann. Daher wird empfohlen, mehrere CMD- oder Shell-Skripte mit einer Folge von Keytool Befehlen zu Keytool . Diese Skripte erleichtern das erneute Ausführen von Befehlen und ermöglichen es Ihnen, zurück zu gehen und zu sehen, wie der Schlüsselspeicher erstellt wurde.


Schlüsselpaargenerierung


Das Generieren eines Schlüsselpaars (öffentlicher Schlüssel / privater Schlüssel) ist eine der häufigsten Aufgaben, für die das Dienstprogramm Keytool verwendet wird. Das generierte Schlüsselpaar wird als selbstsigniertes Schlüsselpaar in die KeyStore- Datei eingefügt. Hier ist ein allgemeines Befehlszeilenformat zum Generieren eines Schlüsselpaars:


 -genkeypair -alias alias -keyalg keyalg -keysize keysize -sigalg sigalg -dname dname -keypass keypass -validity valDays -storetype storetype -keystore keystore -storepass storepass -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption 

Die Argumente werden im Abschnitt Keytool-Argumente erläutert. Nicht alle diese Argumente werden benötigt und viele sind optional. Das Dienstprogramm informiert Sie, wenn Sie das erforderliche Argument übersehen haben. Hier ist ein Beispiel für einen Befehl, der ein Zertifikat in den KeyStore importiert . Denken Sie daran, Zeilenumbrüche zu entfernen, wenn Sie einen Befehl in die Befehlszeile eingeben.


 "C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -importcert -alias testkey -keypass 123456 -storetype JKS -keystore keystore2.jks -file cert.cert -rfc -storepass abcdef 

Liste der Tresordatensätze


Um die Einträge im Keystore aufzulisten, können Sie den Befehl list . Unten finden Sie das Format für den list . Zeilenumbrüche sollen leicht lesbar sein. Entfernen Sie Zeilenumbrüche, bevor Sie den Befehl ausführen:


 -list -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -rfc -protected -Jjavaoption 

Hier ist ein Beispiel für einen list . Denken Sie daran, Zeilenumbrüche zu entfernen!


 "C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -storetype JKS -keystore keystore.jks -storepass abcdef 

Dieser Befehl listet alle Einträge in diesem Schlüsselspeicher auf. Die Ausgabe sieht ungefähr so ​​aus:


 Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry testkey, 19-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 4F:4C:E2:C5:DA:36:E6:A9:93:6F:10:36:9E:E5:E8:5A:6E:F2:11:16 

Wenn Sie das alias Argument in den list , wird nur der Eintrag aufgelistet, der dem angegebenen Alias ​​entspricht. Hier ist ein Beispiel für einen list mit dem alias Argument:


 "C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef 

Das Ergebnis des obigen Befehls:


 testkey, 15-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 71:B0:6E:F1:E9:5A:E7:F5:5E:78:71:DC:08:80:47:E9:5F:F8:6D:25 

Löschen Sie einen Keystore-Eintrag


Außerdem gibt es im Dienstprogramm keytool einen Befehl, mit dem ein Eintrag aus dem Keystore delete kann: delete . Hier ist das Format dieses Befehls:


 -delete -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption 

Hier ist ein Beispiel für den Aufruf von delete . Denken Sie daran, Zeilenumbrüche vor dem Start zu entfernen!


 "C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -delete -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef 

Dieser Befehl löscht den Repository-Eintrag mit dem in der Datei testkey gespeicherten Alias- testkey .


Generierung von Zertifikatsanforderungen


Das Dienstprogramm keytool kann mit dem certreq eine Zertifikatanforderung generieren. Eine Zertifikatanforderung ist eine Anforderung an eine Zertifizierungsstelle (CA), ein öffentliches Zertifikat für Ihre Organisation zu erstellen. Nach dem Erstellen einer Zertifikatanforderung muss diese an die Zertifizierungsstelle gesendet werden, bei der Sie das Zertifikat erstellen möchten (z. B. Verisign, Thawte oder eine andere Zertifizierungsstelle). Bevor Sie eine Zertifikatanforderung für einen privaten Schlüssel und ein Paar öffentlicher Schlüssel generieren können, müssen Sie diesen privaten Schlüssel und ein Paar öffentlicher Schlüssel im Schlüsselspeicher generieren (oder importieren). Wie das geht, finden Sie im entsprechenden Kapitel. Hier ist das Befehlsformat zum Generieren der Zertifikatanforderung. Denken Sie daran, alle Zeilenumbrüche zu entfernen, wenn Sie diesen Befehl verwenden:


 -certreq -alias alias -sigalg sigalg -file certreq_file -keypass keypass -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption 

Hier ist ein Beispiel für den -certreq :


 "C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -certreq -alias testkey -keypass 123456 -storetype JKS -keystore keystore.jks -storepass abcdef -file certreq.certreq 

Dieser Befehl generiert eine Zertifikatanforderung für einen Schlüssel, der mit dem Alias- testkey in der Datei testkey gespeichert ist, und schreibt die Zertifikatanforderung in eine Datei mit dem Namen certreq.certreq .


Argumente des Keytool-Dienstprogramms


Das Folgende ist eine Liste von Argumenten, die verschiedene keytool Befehle keytool . Denken Sie daran, dass nicht alle Teams alle diese Argumente akzeptieren. Sehen Sie sich einen bestimmten Befehl an, um festzustellen, welche Argumente erforderlich sind.


  • -alias Der Alias ​​des -alias Eintrags. Erinnere dich an den Alias
    kann nur auf einen Schlüssel zeigen.
  • -keyalg Der Name des Algorithmus, der zum Generieren des Schlüssels verwendet wird. Häufig verwendete RSA.
  • -keysize Die Schlüsselgröße in Bit. In der Regel sind die Schlüsselgrößen mehrfach. Darüber hinaus können verschiedene Algorithmen nur bestimmte vordefinierte Schlüsselgrößen unterstützen.
  • -sigalg Der Signaturalgorithmus zum Signieren eines Schlüsselpaars.
  • -dname Eindeutiger Name aus dem X.500-Standard. Dieser Name wird zugeordnet
    Ein Alias ​​für dieses Schlüsselpaar auch im Keystore
    wird als Felder "Emittent" und "Betreff" im selbstsignierten verwendet
    Zertifikat.
  • -keypass Schlüsselpaar Passwort erforderlich für
    Zugriff auf dieses bestimmte Schlüsselpaar im Keystore.
  • -validity Anzahl der Tage, an denen das Zertifikat ausgestellt wurde
    an ein Schlüsselpaar angehängt muss gültig sein.
  • -storetype Das Dateiformat, in dem der -storetype gespeichert werden soll. Der Standardwert ist JKS. Eine weitere Option ist das PKCS11-Format.
  • -keystore Der Name der Repository-Datei zum Speichern des generierten Paares
    Schlüssel. Wenn die Datei nicht vorhanden ist, wird sie erstellt.
  • -file Der Name der Datei, die ein Zertifikat lesen oder schreiben oder ein Zertifikat anfordern soll.
  • -storepass Passwort aus dem Keystore an alle, die arbeiten wollen
    Damit benötigen Sie dieses Passwort. Der Unterschied zwischen storepass und keypass in
    dass der erste Zugriff auf das Repository und der zweite Zugriff auf ein separates Repository bietet
    ein Schlüsselpaar. Sie benötigen beide Passwörter, um auf einen beliebigen Schlüssel zugreifen zu können.
    im Lager gespeichert.
  • -rfc Wenn Sie dieses Flag aktivieren, verwendet das Dienstprogramm ein Textformat anstelle eines Binärformats, z. B. zum Exportieren oder Importieren von Zertifikaten. -Rfc-Wert
    bezieht sich auf RFC 1421.
  • -providerName Der Name des kryptografischen API-Anbieters, den Sie beim Erstellen des Schlüsselpaars verwenden möchten. Der Anbietername muss in den Java-Sicherheitseigenschaftendateien angegeben werden.
  • -providerClass Der Name der Stammklasse des kryptografischen API-Anbieters, den Sie verwenden möchten. Wird verwendet, wenn der Anbietername nicht in den Java-Sicherheitseigenschaftendateien angegeben ist.
  • -providerArg Argumente, die während der Initialisierung an den eigenen kryptografischen Anbieter übergeben wurden (falls vom Anbieter erforderlich).
  • -v Kurz für ausführlich, Keytool druckt viele zusätzliche Informationen in einem lesbaren Format in die Befehlszeile.
  • -protected Legt fest, ob das Keystore-Kennwort von einem externen Mechanismus bereitgestellt werden soll, z. B. einem Hardware-Token. Gültige Werte sind wahr und falsch.
  • -Jjavaoption für die Java-VM, die ein Schlüsselpaar generiert und Speicher erstellt.

Source: https://habr.com/ru/post/de446322/


All Articles