Criar certificado digital auto-assinado

Gerar um certificado digital sem validade e que pode ser utilizado para testes de software é uma tarefa relativamente fácil.

Pode-se usar a ferramenta keytool da JDK para essa tarefa:

Para gerar o certificado acesse o prompt do windows (ou console do linux) e dentro da pasta \bin da JDK execute o seguinte comando:

  
 keytool -keystore MeukeyStore.jks -genkey -keyalg rsa -alias aliasDaMinhaChave

 - esse comando cria o keystore MeuKeyStore.jks e solicita a senha para o keystore
 - é solicitado dados pessoais para o certificado
 - ao final é solicitado a senha para a chave privada

Para que o certificado seja ‘auto-assinado’, use o seguinte comando:

 
keytool -keystore MeukeyStore.jks -selfcert -alias aliasDaMinhaChave

 - gera uma 'auto-assinatura' para o certificado
 - é solicitado a senha do keystore e também a senha da chave privada

Para exportar o certificado para um arquivo:

 
 keytool -keystore MeukeyStore.jks -exportcert -alias aliasDaMinhaChave -file Certificado_digital.cer

 - faz o export do certificado (contendo a chave publica) para arquivo Certificado_digital.cer
 - lembre-se que a ferramenta keytool não possui (ainda) a funcionalidade de extrair a chave privada do keystore

O seguinte codigo Java pode ser utilizado para ler o keystore gerado

public class LerCertificadoDoKeyStore_JKS {
   //Ler o certificad do keyStore JKS 
   public static void main(String[] args) throws Exception {

      String pathKeyStore = "C://MeukeyStore.jks";		
      String senhaKeyStore = "changeit";
      String senhaChavePrivada ="123456";
      String alias = "aliasDaMinhaChave";

      InputStream entrada = new FileInputStream(pathKeyStore);

      KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());//JKS 
      try { 
        //carregar o arquivo no keyStore
        ks.load(entrada, senhaKeyStore.toCharArray());

        //obter a chave privada
        KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)
 
        ks.getEntry(alias, new KeyStore.PasswordProtection(senhaChavePrivada.toCharArray()));
        System.out.println("----------------- chave privada----------------------");
        System.out.println(keyEntry.getPrivateKey());

        //certificado correspondente a chave privada			
        System.out.println("----------------- chave publica (Certificado)----------------------");
        System.out.println(keyEntry.getCertificate());

      } catch (Exception e) {
         e.printStackTrace();			
      }	
    }
}

Também é possível gerar certificados usando ferramentas gráficas como a Portecle (Link Portecle ).

Sobre a utilização de certificados digitais com Java seguem alguns conceitos pois quem trabalha com isso apenas uma ou duas vezes ao ano esquece até o básico…

Certificado Digital -
    É um arquivo que contém informações sobre uma entidade e também contém a chave pública.
    O certificado é assinado pela própria entidade (o procedimento da assinatura envolve o uso da chave privada) e também por outras entidades que dizem confiar naquela entidade.
    O padrão mais utilizado para certificados é o ITU-T X.509.  

X509 -    
    Um dos padrões utilizado para organização de certificados digitais
    X.509 foi adaptado para a Internet pelo grupo da Internet Engineering Task Force (IETF) PKIX.       

ICP Brasil -
	Autoridade Certificadora Brasileira.
	É a AC-Raiz, o topo da cadeia de certificação e pode credenciar outras entidades certificadoras abaixo dela (ACs intermediárias).

PEM -
    O formato PEM é o mais utilizado pelos CAs e geralmente têm formatos como . Pem. Crt. Cer, e. Key. 
    Arquivos ASCII são codificados Base64 e conter o seguinte "- BEGIN CERTIFICATE -" e terminam com "- CERTIFICADO DE FINAL -". 
    Os certificados de servidor, certificados intermediários e chaves privadas podem ser colocados em formato PEM

DER - 
    O formato DER é simplesmente uma forma binária de um certificado em formato PEM, em vez de ASCII. 
    Às vezes você tem extensão . Der mas muitas vezes têm uma extensão . Cer então a única maneira de dizer a diferença entre um arquivo DER, un Cer ou arquivo PEM
    é para abri-lo em um editor de texto e procure o BEGIN / END.
    Todos os tipos de certificados e chaves privadas (chaves privadas) pode ser codificado em formato DER. 
    O formato DER é normalmente usado em plataformas Java.

PKCS#12 / PFX
    Os PKCS # 12 ou PFX é um formato binário para armazenar o certificado de servidor, todos os certificados intermediários e a chave privada em um arquivo criptografado. 
    Pfx geralmente têm extensão . PFX e. P12. 
    O formato PFX é comumente usado em computadores Windows, Importação e Exportação certificados, e chaves privadas.   

Keystore -
    É uma área de armazenamento de chaves, no Java, chamado também de java keystore.
    É um repositório de certificados e pode conter também chaves privadas. 
    O próprio arquivo utilizado como keystore pode ser protegido com senha. 
    Ao acessar um keystore sem informar a senha apenas os certificados podem ser acessados.
    Cada chave privada pode possuir sua própria senha, ou seja, para usar uma chave privada que está em um keystore temos que informar duas senhas, uma do keystore e outra, da chave privada.           
    O arquivo cacerts é um keystore, com a senha changeit e o tipo JKS, que fica em um diretório jre/lib/security na sua instalação do Java.

JKS -      
    Java KeyStore     

TrustStore -
    Area de armazenamento de chaves confiáveis.
    Geralmente contem certificados confiáveis ou apenas certificados das autoridades certificadoras.  
LCR -
    CRL - (certificate revocation lists) 	 
    Lista de certificados revogados                   
OCSP -  
    OCSP - (Online Certificate Status Protocol)
    Protocolo de comunicação que permite verificar online se um certificado está revogado.

Se a sua dúvida é sobre certificados V3 veja este outro post clicando aqui

Links sobre certificado digital
http://pt.wikipedia.org/wiki/Certificado_digital
http://www.oracle.com/technetwork/articles/entarch/pfx-pem-certificate-formats-092744.html
http://docs.oracle.com/cd/E28280_01/bi.1111/e22255/digital_sig.htm
http://www.guj.com.br/java/206895-resolvido-sunmscapi-x-sunpkcs11—identificar-e-carregar-token-certificado-a3
http://portecle.sourceforge.net/
http://en.wikipedia.org/wiki/X.509
https://jira.tecgraf.puc-rio.br/confluence/display/OPENBUS015/Geracao+de+Chaves+e+Certificados+Digitais
https://forums.oracle.com/thread/2187957
http://stackoverflow.com/questions/6482484/how-to-use-key-and-crt-file-in-java-that-generated-by-openssl
http://www.thinkplexx.com/learn/howto/security/tools/understanding-java-keytool-working-with-crt-files-fixing-certificate-problems
http://ospkibook.sourceforge.net/docs/OSPKI-2.4.6/OSPKI/pkix-overview.htm
http://pt.megacrack.es/2012/05/22/como-convertir-certificado-pem-a-pfx/
https://www.sslshopper.com/ssl-converter.html

Uma ideia sobre “Criar certificado digital auto-assinado

  1. Pingback: Guia definitivo de certificados em Java! Utilizando Keytool para gerar certificados. | O bom programador

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s