Configurando SSL no Tomcat em 5 minutos (https://localhost:8443)

30 Jun 2011
3 mins read

Este tutorial em como objetivo mostrar como configurar SSL (acesso https://localhost:8443) no Tomcat em 5 minutos.

Para esse tutorial, você irá precisar:

A configuração consiste em 3 passos básicos:

  1. Criar um arquivo keystore usando Java
  2. Configurar o Tomcat para usar o keystore
  3. Testar
  4. (Bônus) Configurar sua web app para usar SSL (acesso através https://localhost:8443/suaApp)

1 - Criando um arquivo keystore usando Java

Abra o terminal no seu computador e digite:

Windows:

[code lang="bash" firstline="1" toolbar="true" collapse="false" wraplines="false"]
cd %JAVA_HOME%/bin
[/code]

Linux or Mac OS:

[code lang="bash" firstline="1" toolbar="true" collapse="false" wraplines="false"]
cd $JAVA_HOME/bin
[/code]

O $JAVA_HOME no Mac está localizado em "/System/Library/Frameworks/JavaVM.framework/Versions/{your java version}/Home/"

Você irá mudar o diretório corrente para o diretório de instalação Java para a pasta bin. Dentro da pasta bin existe um arquivo chamado keytool. Esse arquivo é responsável por gerar o arquivo keystore.

Vamos agora gerar o keystore. Digite no terminal:

[code lang="bash" firstline="1" toolbar="true" collapse="false" wraplines="false"]
keytool -genkey -alias tomcat -keyalg RSA
[/code]

Quando der "Enter" no comando acima, irá aparecer algumas perguntas. Primeiro irá pedir para criar uma senha (escolhi "password" mesmo):

[code lang="bash" firstline="1" toolbar="true" collapse="false" wraplines="false"]
loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:password
Re-enter new password: password
What is your first and last name?
[Unknown]:Loiane Groner
What is the name of your organizational unit?
[Unknown]:home
What is the name of your organization?
[Unknown]:home
What is the name of your City or Locality?
[Unknown]:Sao Paulo
What is the name of your State or Province?
[Unknown]:SP
What is the two-letter country code for this unit?
[Unknown]:BR
Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct?
[no]:yes

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

O arquivo .keystore será criado no seu diretório home. No WIndows será algo do tipo C:\Documents and Settings\<username>; no Mac será /Users/<username> e no Linux será /home/<username>.

2 - Configurando o Tomcat para usar o keystore

Abra o diretório de instalação do Tomcat e abra a pasta conf . Dentro dessa pasta irá encontrar um arquivo chamado server.xml. Vamos editar esse arquivo.

Ache a seguinte declaração:

[code lang="xml" firstline="1" toolbar="true" collapse="false" wraplines="false"]
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
[/code]

Descomente o código acima e altere para ficar como abaixo - detalhe para o diretório onde está o keystore e a senha que setou quando criou o keystore:

[code lang="xml" firstline="1" toolbar="true" collapse="false" wraplines="false" highlight="3,4,5"]
Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
[/code]

Note que adicionamos as declarações keystoreFile, keystorePass e mudamos o protocol .

3 - Vamos testar!

Inicie o serviço do Tomcar e tente acessar https://localhost:8443. Deverá abrir a homepage local do Tomcat.

Note também que se tentar acessar pela porta padrão 8080 deverá funcionar também:http://localhost:8080

4 - BÔNUS - Configurando sua web app para usar SSL (acesso através https://localhost:8443/suaApp)

Para forçar sua aplicação web a funcionar com SSL, adicione o código abaixo no arquivo web.xml da sua aplicação (antes do final da tag web-app):

[code lang="xml" firstline="1" toolbar="true" collapse="false" wraplines="false"]
<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
[/code]

A tag url pattern tem o valor /* para que qualquer página ou arquivo da sua aplicação seja seguro (só poderá ser acessado através de https). A tag transport-guarantee foi setado como CONFIDENTIAL para fazer com que a aplicação seja acessada através de SSL.

Se desejar desativar o acesso SSL da aplicação, não precisa deletar o código do arquivo web.xml, basta trocar o CONFIDENTIAL para NONE.

Referênciahttp://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html (o tutorial da página do Tomcat é um pouco confuso, por isso decidi escrever esse).

Bons códigos!