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.374 ]

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

Utilizando RPM para detecção de intrusos

Knockd (bate, bate, bate na porta do céu)

Iptables protege contra SYN FLOOD?

Fazendo sua conexão remota por SSH mais segura

Aspecto de segurança para uma arquitetura web

  
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