Criptografia em Java. Classe de certificado

Olá Habr! Apresento a você a tradução do artigo final "Certificado Java", de Jakob Jenkov, a partir 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

Certificado Java


A classe de certificado ( java.security.cert.Certificate ) é um certificado que certifica que uma entidade pertence, por exemplo, a um usuário. A instância da classe de certificado contém o nome e outras informações sobre o objeto que identifica, bem como, possivelmente, uma assinatura digital de uma autoridade de certificação (CA). A classe Certificate é uma classe abstrata; portanto, você pode usar Certificate como o tipo da variável e sua variável sempre apontará para uma subclasse. Essa classe possui uma subclasse - X509Certificate , que representa o certificado X.509, usado como certificado nos protocolos HTTPS e TLS.


Obtendo uma instância de certificado


Você pode obter uma instância de certificado das seguintes maneiras:



Consulte estes dois guias para obter mais informações sobre como obter uma instância de certificado.


getEncoded ()


O método getEncoded() do certificado retorna a versão codificada do certificado como uma matriz de bytes. Por exemplo, se o certificado for um certificado X509, a matriz de bytes retornada conterá uma versão codificada em X.590 da instância do certificado (ASN.1 DER). Aqui está um exemplo usando o método getEncoded() :


 byte[] encodedCertificate = certificate.getEncoded(); 

getPublicKey ()


O método de certificado getPublicKey() retorna a chave pública desta instância de certificado. Aqui está um exemplo do método getPublicKey() :


 PublicKey certificatePublicKey = certificate.getPublicKey(); 

getType ()


O método getType() retorna o tipo de instância do certificado. Exemplo getType() :


 String certificateType = certificate.getType(); 

verificar ()


A classe de certificado contém três métodos verify() . Esses métodos podem ser usados ​​para verificar se o certificado está realmente assinado com a chave privada correspondente à chave pública esperada. Aqui está um exemplo de verificação de certificado:


 //     (  !) PublicKey expectedPublicKey = ... ; try{ certificate.verify(expectedPublicKey); } catch (InvalidKeyException e) { //        } catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | CertificateException e){ // -     } 

O método verify() não retorna um valor. Se o teste falhar, uma InvalidKeyException será InvalidKeyException . Se nenhuma exceção for lançada, a instância do certificado poderá ser considerada verificada.


Java CertificateFactory (Fábrica de Certificados


A classe CertificateFactory ( java.security.cert.CertificateFactory ) é capaz de criar instâncias de certificado ( Certificate ) a partir de dados binários para certificados codificados em X.509 (ASN.1 DER). CertificateFactory também pode criar instâncias CertPath . CertPath é uma cadeia de certificados, em que cada certificado é assinado pelo próximo certificado nesta cadeia.


Criando uma instância do CertificateFactory


Antes de criar instâncias de Certificate , você deve criar uma instância de CertificateFactory . Um exemplo:


 CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 

Este exemplo cria uma instância do CertificateFactory , capaz de instanciar um certificado X.509 ( X509Certificate é uma subclasse de Certificate ).


Criar instância de certificado


Criando uma instância do CertificateFactory , você pode começar a criar instâncias do Certificate . Isso é feito chamando o método generateCertificate() . Um exemplo de chamada ao método generateCertificate() :


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream); 

Criando uma instância do CertPath


CertificateFactory também pode instanciar CertPath . Uma instância do CertPath criada chamando o método generateCertPath() :


 InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream); 

Java CertPath (cadeia de certificados)


A classe CertPath ( java.security.cert.CertPath ) representa uma cadeia de certificados (objetos Certificate ), em que cada certificado é um assinante digital do próximo certificado na cadeia. A classe CertPath normalmente usada para verificar um certificado de identidade, junto com certificados de autoridades de certificação (CAs) que assinaram o certificado.


Obtendo uma Instância do CertPath


Normalmente, uma instância do CertPath obtida em uma fábrica de certificados ( CertificateFactory CertPathBuilder ).


getCertificates ()


Depois de obter a instância do CertPath , você pode obter as instâncias de Certificate quais o CertPath consiste chamando o método getCertificates() . Aqui está um exemplo de obtenção de certificados de uma instância do CertPath :


 List<Certificate> certificates = certPath.getCertificates(); 

getType ()


O método getType() retorna uma sequência indicando que tipo de certificados (por exemplo, X.509) está contido nesta instância do CertPath . Aqui está um exemplo de como obter o tipo CertPath através do método getType() :


 String type = certPath.getType(); 

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


All Articles