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:
- Criptografia Java
- Cifra Java
- Messagedigest
- Mac
- Assinatura
- Par de chaves
- Keygenerator
- KeyPairGenerator
- Keystore
- Keytool
- Certificado
- CertificateFactory
- 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:
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();