Criptografia em Java. Utilitário Keytool

Olá Habr! Apresento a você a tradução do 10º artigo "Java Keytool", de Jakob Jenkov, de uma série de artigos para iniciantes que desejam aprender o básico da criptografia em Java.


Sumário:


  1. Criptografia Java
  2. Cifra Java
  3. Messagedigest
  4. Mac
  5. Assinatura
  6. Par de chaves
  7. Keygenerator
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Certificado
  12. CertificateFactory
  13. CertPath

Utilitário Keytool


O Java Keytool é uma ferramenta de linha de comando que pode gerar pares de chave pública / chave privada e armazená-los em um keystore . O arquivo executável do utilitário é distribuído com o Java SDK (ou JRE); ​​portanto, se você tiver o SDK instalado, ele também será pré-instalado.
O executável é chamado keytool . Para executá-lo, abra um prompt de comando (cmd, console, shell etc.). e altere o diretório atual para o diretório bin no diretório de instalação do Java SDK. Digite keytool e pressione Enter . Você deve ver algo semelhante a este:


 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 você pode ver, o utilitário keytool suporta um conjunto de comandos para trabalhar com chaves, certificados e armazenamentos de chaves. Este guia abordará o mais comum desses comandos.


Scripts do Keytool


Keytool comandos do Keytool levam muitos argumentos, cuja instalação pode ser difícil de lembrar. Portanto, é recomendável que você crie vários scripts CMD ou Shell com uma sequência de comandos do Keytool . Esses scripts facilitam a reexecução de comandos e também permitem que você volte e veja como o keystore foi criado.


Geração de par de chaves


A geração de um par de chaves (chave pública / chave privada) é uma das tarefas mais comuns para as quais o utilitário Keytool é usado. O par de chaves gerado é inserido no arquivo KeyStore como um par de chaves autoassinado. Aqui está um formato de linha de comando comum para gerar um par de chaves:


 -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 

Os argumentos são explicados na seção Argumentos do Keytool. Nem todos esses argumentos são necessários e muitos são opcionais. O utilitário informará se você perdeu o argumento necessário. Aqui está um exemplo de um comando que importa um certificado para o KeyStore . Lembre-se de remover as quebras de linha ao inserir um comando na linha 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 do Vault


Para listar as entradas no keystore, você pode usar o comando list Abaixo está o formato para o comando list . As quebras de linha devem ser fáceis de ler. Remova as quebras de linha antes de executar o comando:


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

Aqui está um exemplo de comando da list . Lembre-se de remover quebras de linha!


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

Este comando listará todas as entradas neste keystore. A saída será mais ou menos assim:


 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 

Se você incluir o argumento de alias no comando list , apenas a entrada correspondente ao alias fornecido será listada. Aqui está um exemplo de comando de list com o argumento de alias :


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

O resultado do comando acima:


 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 

Excluir uma entrada de keystore


Também no utilitário keytool , há um comando que pode excluir uma entrada do keystore: delete . Aqui está o formato deste comando:


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

Aqui está um exemplo de chamada delete . Lembre-se de remover as quebras de linha antes de começar!


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

Este comando exclui a entrada do repositório com o alias testkey armazenado no arquivo keystore.jks .


Geração de solicitação de certificado


O utilitário keytool pode gerar uma solicitação de certificado usando o certreq . Uma solicitação de certificado é uma solicitação a uma autoridade de certificação (CA) para criar um certificado público para sua organização. Depois de criar uma solicitação de certificado, ela deve ser enviada à autoridade de certificação onde você deseja criar o certificado (por exemplo, Verisign, Thawte ou alguma outra autoridade de certificação). Antes de poder gerar uma solicitação de certificado para uma chave privada e um par de chaves públicas, você deve gerar essa chave privada e um par de chaves públicas no armazenamento de chaves (ou importá-lo). Como fazer isso pode ser encontrado no capítulo correspondente. Aqui está o formato do comando para gerar a solicitação de certificado. Lembre-se de remover todas as quebras de linha ao usar 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 

Aqui está um exemplo do -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 gerará uma solicitação de certificado para uma chave armazenada com o alias testkey no arquivo keystore.jks e testkey a solicitação de certificado em um arquivo chamado certreq.certreq .


Argumentos do utilitário Keytool


A seguir, é apresentada uma lista de argumentos keytool vários comandos do keytool . Lembre-se de que nem todas as equipes aceitam todos esses argumentos. Veja um comando específico para ver quais argumentos são necessários.


  • -alias O alias da entrada do -alias . Lembre-se do alias
    pode apontar para apenas uma chave.
  • -keyalg O nome do algoritmo usado para gerar a chave. RSA comumente usado.
  • -keysize O tamanho da chave em bits. Normalmente, os tamanhos das chaves são múltiplos. Além disso, vários algoritmos podem suportar apenas determinados tamanhos de chave predefinidos.
  • -sigalg O algoritmo de assinatura usado para assinar um par de chaves.
  • -dname Nome exclusivo do padrão X.500. Este nome será associado a
    um alias para esse par de chaves no keystore, também
    usado como os campos "emissor" e "assunto" no formulário autoassinado
    certificado.
  • -keypass Senha do par de chaves necessária para
    acesso a esse par de chaves específico no keystore.
  • -validity número de dias durante os quais o certificado
    anexado a um par de chaves deve ser válido.
  • -storetype O formato do arquivo no qual o keystore deve ser salvo. O padrão é JKS. Outra opção é o formato PKCS11.
  • -keystore O nome do arquivo do repositório para armazenar o par gerado
    chaves. Se o arquivo não existir, ele será criado.
  • -file O nome do arquivo para ler ou gravar um certificado ou solicitar um certificado.
  • -storepass Senha do keystore, para quem quiser trabalhar
    com ele, você precisa dessa senha. A diferença entre keypass e keypass em
    que o primeiro fornece acesso ao repositório e o segundo a um
    um par de chaves. Você precisará das duas senhas para acessar qualquer chave,
    armazenado em armazenamento.
  • -rfc Se você ativar esse sinalizador, o utilitário usará um formato de texto em vez de um formato binário, por exemplo, para exportar ou importar certificados. Valor -Rfc
    refere-se à RFC 1421.
  • -providerName O nome do provedor de API criptográfica que você deseja usar ao criar o par de chaves. O nome do provedor deve ser especificado nos arquivos de propriedades de segurança Java.
  • -providerClass O nome da classe raiz do provedor de API criptográfica que você deseja usar. Usado quando o nome do provedor não está especificado nos arquivos de propriedades de segurança Java.
  • -providerArg Argumentos passados ​​para o próprio provedor criptográfico durante a inicialização (se necessário pelo provedor).
  • -v Abreviação de verboso, o Keytool imprimirá muitas informações adicionais na linha de comando em um formato legível.
  • -protected Determina se a senha do keystore deve ser fornecida por algum mecanismo externo, por exemplo, um token de hardware. Valores válidos são verdadeiros e falsos.
  • -Jjavaoption sequência de opções para a Java VM que gera um par de chaves e cria armazenamento.

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


All Articles