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

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


SSL - Secure Socket Layer



O protocolo SSL foi desenvolvido pela Netscape em 1994, e permite aos clientes (normalmente os navegadores Web) e servidores HTTP comunicarem-se sobre uma conexão segura. O SSL oferece encriptação, autenticação e integridade dos dados no intuito de proteger a informação trocada em redes públicas inseguras. Há várias versões do SSL, a saber:
  • SSL 2.0: possui algumas fraquezas de segurança, não sendo muito utilizado atualmente;
  • SSL 3.0: é universalmente suportado;
  • Tranport Layer Security (TLS): é um melhoramento do SSL 3.0, tem sido adotado como um padrão na Internet e amplamente suportado por quase todos os softwares recentes.

A encriptação protege dados contra uso não autorizado, utilizando algoritmos criptográficos, antes da transmissão. O dado é criptografado em um lado (cliente ou servidor), transmitido, decifrado pelo outro lado e, então, processado.

A autenticação é um método para verificar a identidade do remetente. A primeira vez que um navegador Web ou outro cliente tenta se comunicar com um servidor Web sobre uma conexão segura, o servidor apresenta ao cliente um conjunto de credenciais na forma de um certificado.

Como o próprio nome indica (Camada de Socket Seguro), conexões SSL agem como sockets conectados por TCP. Portanto, podemos pensar em conexões SSL como conexões TCP seguras desde que o lugar do SSL na pilha de protocolos é imediatamente acima do TCP e logo abaixo da camada de aplicação, como mostra a Figura 2-1.


Figura 2.1 - SSL e a pilha de protocolos TCP/IP (Fonte: [1]).


2.1 SSL e Tomcat

É importante salientar que a configuração do Tomcat para fazer uso do protocolo SSL somente é necessária quando o Tomcat está rodando como um servidor stand-alone.

São chamados standalone, ou stand-alone (literalmente "ficam em pé por si só") os programas completamente auto-suficientes: para seu funcionamento não necessitam de um software auxiliar, como um interpretador, sob o qual terão de ser executados (WIKIPÉDIA, 2008).

Quando o Tomcat estiver rodando unicamente como um servlet contêiner sobre um servidor web dedicado, como Apache ou Microsoft IIS, geralmente é necessário configurar o servidor web primário para tratar as conexões SSL dos usuários.

O servidor primário negociará com os clientes e então redirecionará as requisições destinadas ao Tomcat após tê-las descriptografado. Da mesma forma, o Tomcat responderá ao servidor primário que irá criptografar a resposta gerada pelo Tomcat antes de enviá-la ao cliente. Neste contexto, o servidor Tomcat não participa do processo criptográfico. A Figura 2-2 e a Figura 2-3 representam os dois cenários de comunicação segura apresentados anteriormente.


Figura 2.2 - Tomcat como servidor stand-alone.


Figura 2.3 - Tomcat rodando sobre o servidor web Apache.


Neste trabalho, o cenário abordado é apresentado na Figura 2-2, onde o servidor Tomcat roda como um servidor stand-alone.

2.2. Certificados

Para implementar SSL, um servidor deve possuir um certificado digital associado a cada interface de rede (endereço IP) que aceitará conexões seguras. Um certificado digital serve para, na Internet ou em uma rede local, verificar se uma pessoa ou servidor é quem ela/ele realmente diz ser. Pode-se dizer que um certificado digital é uma carteira de identidade virtual. Em um certificado digital há informações pessoais da pessoa ou servidor, mas a principal informação presente em um certificado é a sua chave pública.

A criptografia usada na Internet se baseia no sistema de chaves. O algoritmo usado na criptografia faz com que sejam geradas duas chaves, uma pública e outra privada (também chamada de secreta). A chave pública, que está presente no certificado digital, é usada para criptografar dados a serem enviados ao dono do certificado. Já a chave privada, que só o dono do certificado conhece, serve para descriptografar a informação que foi criptografada com a sua chave pública. É importante notar que não é possível descriptografar a informação sem ter a chave privada e não é computacionalmente fácil deduzir a chave privada, através da chave pública.

Certificados são emitidos e validados por autoridades confiáveis conhecidas como Autoridades Certificadoras (CAs). Um certificado representa a identidade da chave pública de uma pessoa/servidor. É um documento assinado que tem por finalidade dizer: "Eu certifico que a chave pública presente neste documento pertence à entidade nomeada neste documento. Assinado CA". Algumas CAs bastante conhecidas são a Verisign.
e Entrust:
Neste contexto, é necessário criar um certificado que possa ser utilizado pelo Tomcat. As próximas subseções descrevem como isto pode ser feito.

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

Alta Disponibilidade (High Availability) em sistemas GNU/Linux

Tornando seu Apache mais seguro com o ModSecurity

Desenvolvimento Web - Simples dicas de segurança

SDI (IDS) com o SNORT, MySQL, PHP e BASE em 15 minutos

Tratamento de dados fornecidos pelo usuário: projetando sistemas com mais segurança

  
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