Cryptographie en Java. Utilitaire Keytool

Bonjour, Habr! Je vous présente la traduction du 10Úme article "Java Keytool" de Jakob Jenkov d'une série d'articles pour les débutants qui veulent apprendre les bases de la cryptographie en Java.


Table des matiĂšres:


  1. Cryptographie Java
  2. Chiffrement Java
  3. Messagedigest
  4. Mac
  5. Signature
  6. Keypair
  7. Générateur de clés
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Attestation
  12. CertificateFactory
  13. CertPath

Utilitaire Keytool


Java Keytool est un outil en ligne de commande qui peut générer des paires clé publique / clé privée et les stocker dans un magasin de clés. Le fichier exécutable de l'utilitaire est distribué avec le SDK Java (ou JRE), donc si vous avez installé le SDK, il sera également préinstallé.
L'exécutable est appelé keytool . Pour l'exécuter, ouvrez une invite de commande (cmd, console, shell, etc.). et remplacez le répertoire actuel par le répertoire bin dans le répertoire d'installation du SDK Java. Tapez keytool , puis appuyez sur Enter . Vous devriez voir quelque chose de similaire à ceci:


 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> 

Comme vous pouvez le voir, l'utilitaire keytool prend en charge un ensemble de commandes pour travailler avec des clés, des certificats et des magasins de clés. Ce guide couvrira les commandes les plus utilisées.


Scripts Keytool


Keytool commandes Keytool prennent de nombreux arguments, dont l'installation peut ĂȘtre difficile Ă  retenir. Par consĂ©quent, il est recommandĂ© de crĂ©er plusieurs scripts CMD ou Shell avec une sĂ©quence de commandes Keytool . Ces scripts facilitent la rĂ©exĂ©cution des commandes et vous permettent Ă©galement de revenir en arriĂšre et de voir comment le fichier de clĂ©s a Ă©tĂ© créé.


Génération de paires de clés


La génération d'une paire de clés (clé publique / clé privée) est l'une des tùches les plus courantes pour lesquelles l'utilitaire Keytool est utilisé. La paire de clés générée est insérée dans le fichier KeyStore en tant que paire de clés auto-signée. Voici un format de ligne de commande commun pour générer une paire de clés:


 -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 

Les arguments sont expliqués dans la section Arguments de Keytool. Tous ces arguments ne sont pas nécessaires et beaucoup sont facultatifs. L'utilitaire vous informera si vous avez manqué l'argument requis. Voici un exemple de commande qui importe un certificat dans KeyStore . N'oubliez pas de supprimer les sauts de ligne lorsque vous entrez une commande sur la ligne de commande.


 "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 des enregistrements de coffre-fort


Pour rĂ©pertorier les entrĂ©es du fichier de clĂ©s, vous pouvez utiliser la commande list . Voici le format de la commande list . Les sauts de ligne sont censĂ©s ĂȘtre faciles Ă  lire. Supprimez les sauts de ligne avant d'exĂ©cuter la commande:


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

Voici un exemple de commande de list . N'oubliez pas de supprimer les sauts de ligne!


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

Cette commande répertorie toutes les entrées de ce magasin de clés. La sortie ressemblera à ceci:


 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 

Si vous incluez l'argument alias dans la commande list , seule l'entrée correspondant à l'alias donné sera répertoriée. Voici un exemple de commande de list avec l'argument alias :


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

Le résultat de la commande ci-dessus:


 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 

Supprimer une entrée de fichier de clés


Dans l'utilitaire keytool , il existe également une commande qui peut supprimer une entrée du fichier de clés: delete . Voici le format de cette commande:


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

Voici un exemple d'appel de delete . N'oubliez pas de supprimer les sauts de ligne avant de commencer!


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

Cette commande supprime l'entrée du référentiel avec l'alias testkey stocké dans le fichier keystore.jks .


Génération de demande de certificat


L'utilitaire keytool peut gĂ©nĂ©rer une demande de certificat Ă  l'aide de la certreq . Une demande de certificat est une demande adressĂ©e Ă  une autoritĂ© de certification (CA) pour crĂ©er un certificat public pour votre organisation. AprĂšs avoir créé une demande de certificat, elle doit ĂȘtre envoyĂ©e Ă  l'autoritĂ© de certification oĂč vous souhaitez crĂ©er le certificat (par exemple, Verisign, Thawte ou une autre autoritĂ© de certification). Avant de pouvoir gĂ©nĂ©rer une demande de certificat pour une clĂ© privĂ©e et une paire de clĂ©s publiques, vous devez gĂ©nĂ©rer cette clĂ© privĂ©e et une paire de clĂ©s publiques dans le magasin de clĂ©s (ou l'importer). La procĂ©dure Ă  suivre se trouve dans le chapitre correspondant. Voici le format de commande pour gĂ©nĂ©rer la demande de certificat. N'oubliez pas de supprimer tous les sauts de ligne lorsque vous utilisez cette commande:


 -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 

Voici un exemple de la -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 

Cette commande va générer une demande de certificat pour une clé enregistrée avec l'alias testkey dans le fichier keystore.jks et écrire la demande de certificat dans un fichier nommé certreq.certreq .


Arguments de l'utilitaire Keytool


Voici une liste d'arguments keytool diverses commandes keytool . N'oubliez pas que toutes les équipes n'acceptent pas tous ces arguments. Regardez une commande spécifique pour voir quels arguments elle prend.


  • -alias L'alias de l'entrĂ©e du -alias . Rappelez-vous l'alias
    peut pointer vers une seule clé.
  • -keyalg Le nom de l'algorithme utilisĂ© pour gĂ©nĂ©rer la clĂ©. RSA couramment utilisĂ©.
  • -keysize La taille de clĂ© en bits. En rĂšgle gĂ©nĂ©rale, les tailles de clĂ© sont multiples. De plus, divers algorithmes ne peuvent prendre en charge que certaines tailles de clĂ© prĂ©dĂ©finies.
  • -sigalg L'algorithme de signature utilisĂ© pour signer une paire de clĂ©s.
  • -dname Nom unique de la norme X.500. Ce nom sera associĂ© Ă 
    un alias pour cette paire de clés dans le magasin de clés, également
    utilisés comme champs «émetteur» et «sujet» dans le
    certificat.
  • -keypass Mot de passe de paire de clĂ©s requis pour
    l'accÚs à cette paire de clés particuliÚre dans le magasin de clés.
  • -validity nombre de jours pendant lesquels le certificat
    attachĂ© Ă  une paire de clĂ©s doit ĂȘtre valide.
  • -storetype Le format de fichier dans lequel le fichier de -storetype doit ĂȘtre enregistrĂ©. La valeur par dĂ©faut est JKS. Une autre option est le format PKCS11.
  • -keystore Le nom du fichier de rĂ©fĂ©rentiel pour stocker la paire gĂ©nĂ©rĂ©e
    clés. Si le fichier n'existe pas, il sera créé.
  • -file Le nom du fichier pour lire ou Ă©crire un certificat ou demander un certificat.
  • -storepass Password du magasin de -storepass , Ă  toute personne qui veut travailler
    avec lui, vous avez besoin de ce mot de passe. La différence entre storepass et keypass dans
    que le premier donne accÚs au référentiel et le second à un autre
    une paire de clés. Vous aurez besoin des deux mots de passe pour accéder à n'importe quelle clé,
    stocké dans le stockage.
  • -rfc Si vous activez cet indicateur, l'utilitaire utilisera un format texte plutĂŽt qu'un format binaire, par exemple, pour exporter ou importer des certificats. -Valeur rfc
    fait référence à RFC 1421.
  • -providerName Le nom du fournisseur d'API cryptographique que vous souhaitez utiliser lors de la crĂ©ation de la paire de clĂ©s. Le nom du fournisseur doit ĂȘtre spĂ©cifiĂ© dans les fichiers de propriĂ©tĂ©s de sĂ©curitĂ© Java.
  • -providerClass Le nom de la classe racine du fournisseur d'API cryptographique que vous souhaitez utiliser. UtilisĂ© lorsque le nom du fournisseur n'est pas spĂ©cifiĂ© dans les fichiers de propriĂ©tĂ©s de sĂ©curitĂ© Java.
  • -providerArg Arguments transmis au propre fournisseur de chiffrement lors de l'initialisation (si nĂ©cessaire par le fournisseur).
  • -v AbrĂ©viation de verbose, Keytool imprimera de nombreuses informations supplĂ©mentaires sur la ligne de commande dans un format lisible.
  • -protected DĂ©termine si le mot de passe du magasin de clĂ©s doit ĂȘtre fourni par un mĂ©canisme externe, par exemple, un jeton matĂ©riel. Les valeurs valides sont true et false.
  • -Jjavaoption ChaĂźne d'option pour la machine virtuelle Java qui gĂ©nĂšre une paire de clĂ©s et crĂ©e un stockage.

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


All Articles