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:
- Cryptographie Java
- Chiffrement Java
- Messagedigest
- Mac
- Signature
- Keypair
- Générateur de clés
- KeyPairGenerator
- Keystore
- Keytool
- Attestation
- CertificateFactory
- CertPath
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.
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
.
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.