Criptografía en Java. Keytool Utility

Hola Habr! Le presento la traducción del décimo artículo "Java Keytool" de Jakob Jenkov de una serie de artículos para principiantes que desean aprender los conceptos básicos de la criptografía en Java.


Tabla de contenido:


  1. Criptografía Java
  2. Cifrado de Java
  3. Messagedigest
  4. Mac
  5. Firma
  6. Par de llaves
  7. Generador de claves
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Certificado
  12. CertificateFactory
  13. CertPath

Keytool Utility


Java Keytool es una herramienta de línea de comandos que puede generar pares de clave pública / clave privada y almacenarlos en un almacén de claves . El archivo ejecutable de la utilidad se distribuye con el SDK de Java (o JRE), por lo tanto, si tiene instalado el SDK, también estará preinstalado.
El ejecutable se llama keytool . Para ejecutarlo, abra un símbolo del sistema (cmd, consola, shell, etc.). y cambie el directorio actual al directorio bin en el directorio de instalación de Java SDK. Escriba keytool y luego presione Enter . Deberías ver algo similar a esto:


 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> 

Como puede ver, la utilidad keytool admite un conjunto de comandos para trabajar con claves, certificados y almacenes de claves. Esta guía cubrirá el más utilizado de estos comandos.


Keytool Scripts


Keytool comandos de Keytool toman muchos argumentos, cuya instalación puede ser difícil de recordar. Por lo tanto, se recomienda que cree varios scripts CMD o Shell con una secuencia de comandos Keytool . Estos scripts hacen que sea fácil volver a ejecutar comandos y también le permiten regresar y ver cómo se creó el almacén de claves.


Generación de pares de claves


Generar un par de claves (clave pública / clave privada) es una de las tareas más comunes para las que se utiliza la utilidad Keytool . El par de claves generado se inserta en el archivo KeyStore como un par de claves autofirmado . Aquí hay un formato de línea de comando común para generar un par de claves:


 -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 

Los argumentos se explican en la sección Argumentos de Keytool. No todos estos argumentos son necesarios y muchos son opcionales. La utilidad le informará si perdió el argumento requerido. Aquí hay un ejemplo de un comando que importa un certificado en KeyStore . Recuerde eliminar los saltos de línea cuando ingrese un comando en la línea de comando.


 "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 

Lista de registros de bóveda


Para enumerar las entradas en el almacén de claves, puede usar el comando de list . A continuación se muestra el formato para el comando de list . Los saltos de línea están destinados a ser fáciles de leer. Elimine los saltos de línea antes de ejecutar el comando:


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

Aquí hay un ejemplo de comando de list . ¡Recuerde eliminar los saltos de línea!


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

Este comando enumerará todas las entradas en este almacén de claves. La salida se verá más o menos así:


 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 incluye el argumento alias en el comando de list , solo se list la entrada que coincida con el alias dado. Aquí hay un ejemplo de comando de list con el argumento alias :


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

El resultado del comando anterior:


 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 

Eliminar una entrada del almacén de claves


También en la utilidad keytool hay un comando que puede eliminar una entrada del almacén de claves: delete . Aquí está el formato de este comando:


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

Aquí hay un ejemplo de llamar a delete . ¡Recuerde eliminar los saltos de línea antes de comenzar!


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

Este comando elimina la entrada del repositorio con el alias testkey almacenado en el archivo keystore.jks .


Generación de Solicitud de Certificado


La utilidad keytool puede generar una solicitud de certificado utilizando el certreq . Una solicitud de certificado es una solicitud a una autoridad de certificación (CA) para crear un certificado público para su organización. Después de crear una solicitud de certificado, debe enviarse a la autoridad de certificación donde desea crear el certificado (por ejemplo, Verisign, Thawte o alguna otra autoridad de certificación). Antes de que pueda generar una solicitud de certificado para una clave privada y un par de claves públicas, debe generar esta clave privada y un par de claves públicas en el almacén de claves (o importarla). Cómo hacerlo se puede encontrar en el capítulo correspondiente. Aquí está el formato de comando para generar la solicitud de certificado. Recuerde eliminar todos los saltos de línea cuando use este comando:


 -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 

Aquí hay un ejemplo del -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 

Este comando generará una solicitud de certificado para una clave almacenada con la clave de testkey alias en el archivo keystore.jks y escribirá la solicitud de certificado en un archivo llamado certreq.certreq .


Argumentos de utilidad de Keytool


La siguiente es una lista de argumentos que keytool varios comandos keytool . Recuerde que no todos los equipos aceptan todos estos argumentos. Mire un comando específico para ver qué argumentos se necesitan.


  • -alias El alias de la entrada del -alias de -alias . Recuerda el alias
    puede señalar solo una clave.
  • -keyalg El nombre del algoritmo utilizado para generar la clave. RSA de uso común.
  • -keysize El tamaño de la clave en bits. Por lo general, los tamaños de las claves son múltiples. Además, varios algoritmos solo pueden admitir ciertos tamaños de clave predefinidos.
  • -sigalg El algoritmo de firma utilizado para firmar un par de claves.
  • -dname Nombre único del estándar X.500. Este nombre estará asociado con
    un alias para este par de claves en el almacén de claves, también
    utilizado como los campos "emisor" y "sujeto" en el autofirmado
    certificado
  • -keypass Se requiere contraseña de par de claves para
    acceso a este par de claves en particular en el almacén de claves.
  • -validity número de días durante los cuales el certificado
    adjunto a un par de claves debe ser válido.
  • -storetype El formato de archivo en el que se debe guardar el almacén de claves. El valor predeterminado es JKS. Otra opción es el formato PKCS11.
  • -keystore El nombre del archivo de repositorio para almacenar el par generado
    llaves Si el archivo no existe, se creará.
  • -file El nombre del archivo para leer o escribir un certificado o solicitar un certificado.
  • -storepass Contraseña del almacén de claves, a cualquiera que quiera trabajar
    con ella, necesitas esta contraseña. La diferencia entre storepass y keypass en
    que el primero proporciona acceso al repositorio, y el segundo a otro
    Un par de llaves. Necesitará ambas contraseñas para acceder a cualquier clave,
    almacenado en el almacenamiento
  • -rfc Si habilita este indicador, la utilidad utilizará un formato de texto en lugar de un formato binario, por ejemplo, para exportar o importar certificados. -Rfc valor
    se refiere a RFC 1421.
  • -providerName El nombre del proveedor de API criptográfica que desea usar al crear el par de claves. El nombre del proveedor debe especificarse en los archivos de propiedades de seguridad de Java.
  • -providerClass El nombre de la clase raíz del proveedor de API criptográfica que desea usar. Se utiliza cuando el nombre del proveedor no se especifica en los archivos de propiedades de seguridad de Java.
  • -providerArg Argumentos pasados ​​al propio proveedor criptográfico durante la inicialización (si es necesario por el proveedor).
  • -v Abreviatura de detallado, Keytool imprimirá mucha información adicional en la línea de comandos en un formato legible.
  • -protected Determina si la contraseña del almacén de claves debe ser proporcionada por algún mecanismo externo, por ejemplo, un token de hardware. Los valores válidos son verdadero y falso.
  • -Jjavaoption cadena de opciones para la máquina virtual Java que genera un par de claves y crea almacenamiento.

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


All Articles