Tomcat + SSL: HOW-TO

Neste trabalho será apresentado o Secure Socket Layer (SSL), um protocolo que permite aos clientes (normalmente os navegadores Web) e servidores comunicarem-se sobre uma conexão segura. Posteriormente, será apresentada a instalação e configuração segura, por meio do uso de SSL, da ferramenta livre Tomcat, um servidor de aplicações desenvolvido pela Apache Foundation.

[ Hits: 57.239 ]

Por: Paulo Afonso Parreira Júnior em 23/05/2008


Configuração Tomcat + SSL



5.1 Instalando o JSSE

A instalação do JSSE é extremamente simples. Faça o download do JSSE, versão 1.0.2 ou superior, através do link apresentado na Tabela 1 1. Posteriormente, descompacte o arquivo obtido por download em uma pasta específica. Crie uma variável de ambiente com o nome JSSE_HOME que contenha o caminho absoluto para o diretório em que o JSSE foi descompactado. A Listagem 5-1 apresenta a seqüência de comandos necessária para a instalação do JSSE.

# Copia o arquivo binário para o diretório /opt.
sudo mv jsse-1_0_3_04-gl.zip /opt/

# Descompactando o arquivo.
sudo tar -xzvf jsse-1_0_3_04-gl.zip

# Renomeia o diretório onde foi descompactado o arquivo.
sudo mv jsse-1_0_3_04-gl jsse

Edite o arquivo /etc/bash.bashrc com o editor de texto de preferência e adicione as linhas a seguir, definindo uma variável de ambiente chamada JSSE_HOME:

JSSE_HOME=/opt/jsse
export JSSE_HOME

Listagem 5-1 - Instalando o JSSE.

5.2 Criando os Certificados

Para a criação do certificado do servidor Tomcat será utilizada a ferramenta Keytool, que já vem instalada na versão 1.4 do Java 2 Second Edition (J2SE). O Keytool é um utilitário de gerenciamento de certificados e chaves. Possibilita ao usuário administrar seus pares de chaves públicas e privadas e os certificados associados para uso de auto-autenticação ou para uso de integridade e autenticação usando assinaturas digitais. O Keytool fica na pasta bin do diretório do j2sdk.

O Keytool armazena as chaves e os certificados em um local chamado keystore. O keystore é normalmente implementado na forma de arquivos, protegendo as chaves privadas com senhas. O keystore é um formato padrão da plataforma Java que é utilizado pelo Tomcat.

Para a criação do certificado do servidor, foi utilizado o comando apresentado na Listagem 5-2.

$ $JAVA_HOME/bin/keytool -genkey -keystore kservidor -alias tomcat -keyalg RSA
Enter keystore password: sua_senha
What is your first and last name?
  [Unknown]:  localhost
What is the name of your organizational unit?
  [Unknown]:  CIC
What is the name of your organization?
  [Unknown]:  UFLA
What is the name of your City or Locality?
  [Unknown]:  Lavras
What is the name of your State or Province?
  [Unknown]:  Minas Gerais
What is the two-letter country code for this unit?
  [Unknown]:  BR
Is CN=localhost, OU=CIC, O=UFLA, L=Lavras, ST=Minas Gerais, C=BR correct?
  [no]:  yes

Enter key password for <tomcat>
        (RETURN if same as keystore password): sua_senha

Listagem 5-2 - Criando o certificado do servidor.

O primeiro comando da Listagem 5-2 gera um certificado referenciado pelo alias tomcat e que será armazenado em um arquivo chamado kservidor. O certificado foi gerado utilizando o algoritmo RSA e foi pedido uma senha para o armazenamento da chave no keystore e uma senha para o alias.

É importante salientar que o algoritmo RSA deve ser utilizado preferencialmente, por ser considerado um algoritmo seguro e por ser compatível com a maioria dos servidores de componentes.

5.3 Editando o Arquivo de Configuração do Tomcat

Finalmente, basta alterar o arquivo de configuração $CATALINA_HOME/conf/server.xml, onde $CATALINA_HOME representa o diretório onde o Tomcat está instalado. Uma tag chamada é incluída no arquivo server.xml que vem instalado por padrão junto com o Tomcat . As alterações realizadas neste arquivo são apresentadas na Listagem 5-3.

O atributo port (por padrão, definido com o valor 8443) faz referência ao número da porta na qual o Tomcat esperará por conexões seguras. É possível alterar o valor deste atributo para qualquer outra porta, como por exemplo, a porta padrão para comunicação via protocolo HTTPS (443), entretanto em alguns sistemas operacionais, é necessário que o número da porta utilizado seja maior que 1024.

<-- Definindo um conector SSL HTTP/1.1 na porta 8443 -->

<Connector className="org.apache.catalina.connector.http.HttpConnector"

           port="8443" minProcessors="5" maxProcessors="75"

           enableLookups="true"

           acceptCount="10" debug="0" scheme="https" secure="true">

  <Factory className="org.apache.catalina.net.SSLServerSocketFactory"

           clientAuth="false" protocol="TLS"/>

</Connector>

Listagem 5-3 - Alterando o arquivo server.xml.

Pode-se notar a presença de um elemento Factory apresentado na Listagem 5-3. Este elemento define uma fábrica de sockets, ou seja, um componente que cria e configura um socket para conectar-se a uma determinada porta. A Tabela 5-1 apresenta os atributos configuráveis para o elemento Factory, bem como uma breve descrição sobre cada um destes elementos.

Depois de completada todas estas configurações, deve-se reiniciar o Tomcat. Para acessar qualquer aplicação web que suporte SSL deve-se utilizar o endereço: https://localhost:8443.

Atributo Descrição
className A nome da classe que implementa a fábrica de sockets.
clientAuth Altere este valor para true caso for necessário que o Tomcat requisite de todos os clientes SSL um certificado para utilização do socket criado.
keystoreFile Adicione este atributo se o arquivo keystore não está localizado no local padrão esperado pelo Tomcat. O padrão esperado pelo Tomcat é um arquivo com o nome .keystore localizado no diretório /home do usuário.
keystorePass Adicione este elemento se for necessário utilizar uma senha diferente da esperado pelo Tomcat para o keystore e para o certificado (Recomendado).
protocol O protocolo de criptografia que será utilizado neste socket.

Tabela 5-1 - Atributos do elemento Factory.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. SSL - Secure Socket Layer
   3. JSSE - Java Secure Socket Extension
   4. Instalando o Servidor Tomcat
   5. Configuração Tomcat + SSL
   6. Considerações finais
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Melhorando o nível de segurança com chflags

Configurando o IDS - Snort / Honeypot (parte 1)

Elevação de privilégios locais

Jogando pesado na segurança de seu SSH

Sistemas e volumes criptografados e escondidos utilizando o TrueCrypt

  
Comentários
[1] Comentário enviado por foguinho.peruca em 24/05/2008 - 13:26h

Olá!

Excelente artigo, muito bem detalhado e explicado. vou usar ele de base para alguns projetos que eu estou executando.

[]s
Jeff

[2] Comentário enviado por marcosmiras em 26/05/2008 - 09:36h

Cara se não sabe o quanto eu pastei para fazer isso algum tempo atrás... Legal você ter postado esse artigo, pode ajudar muito nego aí... hehe
[]'s

[3] Comentário enviado por pauloafpjunior em 27/05/2008 - 18:04h

Olá pessoal.

Espero que o tutorial seja uma boa contribuição para a comunidade de SL. Agradeço pelos comentários.

Abraços,
Paulo Júnior.

[4] Comentário enviado por luizrobertofj em 11/08/2008 - 04:25h

Que bom seria se todo artigo seguisse seu padrão.
Parabéns!

[5] Comentário enviado por pauloafpjunior em 11/08/2008 - 07:34h

Olá Luiz.

Obrigado pelo comentário. Que bom que tu gostou do artigo.

Até mais,
Paulo Júnior.

[6] Comentário enviado por luizvieira em 12/03/2010 - 14:23h

Olá Paulo, algumas dúvidas se puder ajudar-me:
- tenho duas aplicações rodando num server, uma em java é o que valida o login e senha e gera um token, enviando a URL para a outra aplicação via navegador, mas comos dados do usuário e o token gerado visível. O que quero saber é se com o SSL esse URL seria criptofgeafada ao ser enviada pelo navegado.
- o tomcat faria a decodificação dessa URL criptografada de forma que seja acessível para minha segunda aplicação?

Estou com essas dúvdia prq um cliente não quer o método de token, então pensei na possibilidade de usar o token + SSL pelo tomcat.
Se puder ajudar, agradeço :-)

E parabéns pelo artigo, muito bem escrito!
[ ]'s
Luiz

[7] Comentário enviado por pauloafpjunior em 12/03/2010 - 14:38h

Olá Luiz.

Obrigado.

Utilizando SSL, todo o tráfego de dados entre cliente e servidor será criptografado. Você pode colocar esse token em uma estrutura de dados, serializá-la e depois enviar pela rede, pois a conexão estará segura. Na outra ponta você receberá a mesma estrutura de dados decriptografada e pronta para ser utilizada.

Att,
Paulo Junior





Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts