Skip to content

Passo a Passo / Certficado / Java / JKS

Dezembro 19, 2011

Um trabalho que já necessitei várias vezes, e também já fui questionado a respeito, é a construção de chaves e certificados para testes de conexão SSL em Java. Desta forma, resolvi escrever esse post, tanto para ajudar aqueles que precisam, como para geraçao de um backup de informaÇão para meu cérebro =b.

O esquemático abaixo ilustra o passo a passo de geração de arquivos JKS para estabelecer uma comunicação SSL entre clientes e servidores Java.

Passo a passo para geração do keystore e truststre

O primeiro passo consiste na geração da chave privada, peça vital que fica do lado daquele que irá decriptar as informações, normalmente o servidor. A extensão do arquivo normalmente é a “.pem” .

Já no segundo passo, pode-se seguir dois caminhos. Na primeira opção, você pode construir um certificado auto assinado (normalmente usado para testes). Já na segunda, você constrói um arquivo de requisição de certificado e, logo após, deve enviá-lo para um CA (Certificate Authority), para que esse gere o certificado final (que tem o “mesmo valor” que o certificado auto assinado). Lembrando que você é cobrado, e muito, pela atuação desse CA =b.
A diferença entre os dois tipos de certificados é que o primeiro não possui uma assinatura válida, sendo que os diversos browsers e demais meios de comunicação não possuem essa assinatura “home made” em sua base de conhecimento. Isto gera, por exemplo, aquelas mensagens de “Você entende os riscos de acessar esse site”, que aparecem quando acessamos alguns sites HTTPS. Mas tudo bem, para testes isso é irrelevante.

No terceiro passo, devemos gerar o arquivo que será carregado, normalmente, pelo servidor Java (Java SE app, JBoss, Tomcat, etc …). Este arquivo contém tanto uma cópia do certificado, como a chave privada. Isto porque o servidor tem que, tanto enviar o certifiado para se apresentar ao cliente, como ter a chave privada para decriptar os dados que vão trafegar.
Através do comando openssl, é gerado o arquivo de saída com a extensão p12. Porém, a maioria dos servidores necessitam o arquivo no formato JKS (Java Keystore). Assim, precisamos realizar a conversão desse arquivo. Normalmente utilizo a classe PKCS12Import, distribuída em diversas libs que encontramos por ai.

Por fim, no último passo, geramos o arquivo JKS que deverá ser instalado no lado normalmente representado pelo cliente, ou seja, no lado daquele que inicia a conexão. Repare que o arquivo final só é composto do certificado, e não da chave privada.

Pronto! Importando o primeiro JKS (também conhecido como keystore) no servidor, e o segundo JKS (também conhecido como truststore) dentro do cliente, o cenário encontra-se pronto para os testes. A comunicação entre o cliente e o servidor seria como ilustrado na figura abaixo:

Negociaçao SSL

Ainda, no meio do post, usei bastante os termos “normalmente o servidor” e “normalmente o cliente”. Isto porque pode-se também fazer uma autenticação reversa na comunicaÇão SSL, também conhecida como client authentication. Neste cenário, o cliente também terá um keystore, e o servidor armazenará o trustore do cliente. Com isso, o servidor pode ter certeza que o cliente com quem ele está falando é realmente quem ele pensa que é. Com isso, a negociação SSL evolui para “algo parecido” com a ilustração abaixo

Negociação com autenticação do cliente

Bom, muita coisa existe ainda nesse mundo de construção de chaves e certficados. Discutirei mais sobre isso em futuros posts, mas não hesitem em me “procurar” para esclarecer dúvidas ou outras funcionalidades.

[]’s

From → Uncategorized

5 comentários
  1. Bom post Chies! Realmente serve de “backup de informação para meu cérebro”, porque lembrar desses comandos é tenso!! :]

    Abraço,

  2. André Souza permalink

    Muito bom o post eu estava a procura de algo mais claro para entender essa parte de criptografia e certificado e depois de muito localizei um post completo e de simples entendimento. Parabéns pelo post e vlw.

  3. Olá amigo,

    estou precisando conectar ao web service da Sefaz, foi me passado os seguintes arquivos:

    arquivo.cer
    arquivo.csr
    arquivo.key
    arquivo.p12
    arquivo.pfx

    não sei como usar esses arquivos, vc poderia me dar uma luz por favor?

    Obrigado.

  4. muito bacana a explicação.

  5. Parabéns pela explicação sucinta e bem ilustrada. Muito útil, ainda mais para quem desenvolve applets ;)

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

Coding Horror

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

InfoQ

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBoss Developer Recent Posts

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBossDivers

Mergulhando no Mundo JBoss

%d bloggers like this: