segunda-feira, 9 de novembro de 2009

Adicionando suporte a conexões SSL no JBoss

Se você usa o JBoss como servidor de aplicações, e deseja criptografar os dados trocados entre o servidor e o cliente, você pode usar a solução a seguir para criar um certificado SSL, e ativar o serviço no JBoss.

Uma palavra de cautela: Um certificado SSL tem dois objetivos: criptografar dados, e garantir procedência. Apenas o primeiro item é coberto por este tutorial, pois aqui você vai ver como criar um certificado auto-assinado. Se você sabe o que isto significa, e conhece bem os riscos que isto pode ocasionar, vá em frente. A configuração a seguir é um ótimo campo-de-testes. Mas se não sabe, procure estudar mais um pouco, e entender bem os riscos. Depois, volte aqui e aproveite.

Passo 1: decida por qual URL você vai acessar o seu servidor
Este passo é importante, pois este endereço vai ser gravado no certificado, e se você acessar o servidor por outro endereço, o navegador irá reclamar. Caso esteja fazendo apenas um teste em seu próprio computador, localhost é o suficiente.

Passo 2: crie um certificado auto-assinado
Como vimos acima, é um risco de segurança usar certificados auto-assinados. Mas para ambientes de teste e desenvolvimento, eles são mais do que suficientes. O local do arquivo vai depender de qual profile do JBoss você usa. No caso, vamos exemplificar com o 'default' mesmo.

- Vá até o diretório de configuração do profile
cd /opt/jboss-4.2.3.GA/server/default/conf

- Crie o arquivo keystore.jks usando a ferramenta keytool:
keytool -genkey -alias jboss -validity 1825 -keyalg RSA -keystore keystore.jks

Uma breve explicação do que estamos fazendo:

* -alias jboss: apelido que damos  a este certificado, dentro do keystore.

* -validity 1825: número de dias em que este certificado será válido. Neste caso, 5 anos.

Ao digitar este comando, o keytool vai começar a perguntar um punhado de informações, que serão usadas para compor o certificado. Vamos mostrar aqui como ficariam estas informações, para o setor de TI da Example Corporation:

Enter keystore password: 
Re-enter new password: 
What is your first and last name?
  [Unknown]:  localhost
What is the name of your organizational unit?
  [Unknown]:  Setor de TI
What is the name of your organization?
  [Unknown]:  Example Corporation
What is the name of your City or Locality?
  [Unknown]:  Porto Alegre
What is the name of your State or Province?
  [Unknown]:  Rio Grande do Sul
What is the two-letter country code for this unit?
  [Unknown]:  BR
Is CN=localhost, OU=Setor de TI, O=Example Corporation, L=Porto Alegre, ST=Rio Grande do Sul, C=BR correct?
  [no]: 

Enter key password for 
 (RETURN if same as keystore password):  
Re-enter new password:

Alguns itens aqui são de extrema importância:

* keystore password: deve ser uma senha de pelo menos seis caracteres. Use a mesma senha, tanto no início quanto no final da lista acima.

* first and last name: Apesar de parecer que ele quer o seu nome e sobrenome, digite ali a URL do servidor, escolhida no passo 1

Ao terminar, o arquivo keystore.jks deve estar criado.

Passo 3: Edite o arquivo de configuração
Quem serve os JSPs e servlets no JBoss é o Tomcat. Vá até o diretório de configuração dele, e edite o arquivo server.xml:

vi /opt/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml

Neste arquivo, você verá uma seção chamada Connectors. Entre os diversos Connectors, vai haver um, comentado, que aponta para a porta 8443. Deixe-o comentado. Abaixo dele, use a seguinte configuração:


  port="8443" address="${jboss.bind.address}"
  scheme="https" secure="true" clientAuth="false"
  keystoreFile="/opt/jboss-4.2.3.GA/server/default/conf/keystore.jks"
  keystorePass="umasenha" sslProtocol="TLS"
  keyAlias="jboss"/>

Alguns itens importantes:

* port="8443": a porta a ser usada. Normalmente a porta para https é a 443. Mas esta porta só pode ser usada por processos iniciados com o usuário root em sistemas unix/linux.

* keystorePass="umasenha": digite aqui a senha escolhida por você durante a geração do arquivo keystore.jks.

Salve e feche o arquivo. A princípio, isto basta. Vá adiante.

Passo 4: Reinicie e teste
Após baixar e levantar o JBoss, acesse o servidor pela URL escolhida, na porta 8443. No exemplo acima:

https://localhost:8443

E é só.