Certificado na truststore do glassfish

Entender sobre certificado digital é tão importante quanto desenvolver bem, pois, tanto sendo servidor quanto cliente, o mínimo de segurança sempre devemos colocar em pauta. Bom, desenvolvi um web service com o framework Apache CXF que se comunicava com um outro WS a partir de um endereço HTTPS, mas sempre retornava o famigerado erro:

“unable to find valid certification path to requested target”

Para solucionar, foi necessário importar a Root CA desse web service ao qual a minha aplicação era cliente na truststore de execução do Java, permitindo que o web container aceitasse o certificado fornecido. Porém, o Glassfish, diferente do Apache Tomcat que utiliza a truststore cacerts do JRE localizado no endereço abaixo:
  • C:\Program Files\Java\jre7\lib\security\cacerts
Usa o cacerts criado dentro do diretório domínio na pasta config. Exemplo do endereço de um cacerts de um domínio padrão:
  • \glassfish\domains\domain1\config\cacerts.jks
Para importar a Root CA, primeiro precisamos exportá-la a partir do endereço HTTPS do web service. Isso pode ser feito em qualquer navegador. No exemplo nosso faremos no Chrome. Ao acessar a página, provavelmente retornará um erro, isso acontece pois o certificado fornecido não é confiável para a sua máquina, portanto seu sistema operacional não possui a Root CA para verificar a autenticidade (veja em certmgr.msc na pasta Trusted Root Certification Authorities).


O próximo passo é clicar no cadeado na barra de endereço e depois em certificate information. Ao abrir o diálogo Certificate, ir para a guia Certification Path e clicar no certificado no topo da tree view (no caso é a root CA que gerou o certificado para o OpenScape Deployment Service V3) e depois em View Certificate. Na guia Details, clicar no botão Copy to File e exportar no formato DER encoded binary x.509.





Feito isso, o restante é simples. Precisamos acessar a pasta config do domínio alvo e executar um comando para incluir a root CA exportada, mas antes disso, vamos salvar um arquivo de texto informando os certificados já presentes na truststore:
  • keytool -list -v -keystore cacerts.jks > cacerts_antes.txt
Agora podemos executar o comando para incluir o certificado:
  • keytool -import -alias dlsrootca -keystore cacerts.jks -file  dlsRootCA.cer
  • A senha padrão é changeit
Depois de exportar a lista de certificados da truststore novamente, teremos o seguinte alias inserido no arquivo:


Para excluir um certificado que já foi inserido, podemos realizá-lo pelo comando abaixo:
  • keytool -delete -alias dlsrootca -keystore cacerts.jks
O próximo artigo sobre certificados digitais será sobre a criação de uma keystore, com a chave pública assinada por uma Root CA do Windows Server 2008 R2, e como fazemos para usá-la no Apache Tomcat, por exemplo.

Aqlbras! Ao som de Sabes Mentir, Djavan.

Comentários