Configurando o Acesso Seguro no Tomcat
Implementar o acesso seguro via SSL no Tomcat (o acesso https, ou http seguro) é simples. Para isso, é necessário a criação de um certificado (que pode ser validado por uma entidade certificadora ou não) e a habilitação do certificado no Tomcat.
Siga os passos abaixo:
1. Vamos criar um certificado de nome tomcat no keystore localizado em /etc/.keystore-tomcat, usando o algoritmo RSA e com validade de 1 ano (365 dias). Altere o comando caso necessário para definir outros locais ou validades.
$ keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/.keystore-tomcat -validity 365
O keytool irá fazer algumas perguntas para criar o certificado. São elas:
- a senha do keystore (escolha uma à seu gosto, mas deverá ser a mesma senha do certificado, mais adiante, e deverá ser escrita no server.xml)
- o endereço do site (ele pergunta primeiro e ultimo nome, mas é para botar o endereço do site)
- unidade organizacional (qualquer coisa)
- nome da empresa
- cidade
- estado
- país (apenas 2 letras, como em BR)
- em seguida será pedida uma confirmação dos dados
- por fim pedirá a senha do certificado tomcat, tecle Enter para que seja igual à senha do keystore
Eis um exemplo de configuração:
$ keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/.keystore-tomcat -validity 365 Enter keystore password: SUA_SENHA What is your first and last name? [Unknown]: SEU_SERVIDOR.SEU_DOMINIO What is the name of your organizational unit? [Unknown]: SEU_SERVIDOR What is the name of your organization? [Unknown]: NOME_DA_SUA_EMPRESA What is the name of your City or Locality? [Unknown]: Rio de Janeiro What is the name of your State or Province? [Unknown]: RJ What is the two-letter country code for this unit? [Unknown]: BR Is CN=SEU_SERVIDOR.SEU_DOMINIO, OU=SEU_SERVIDOR, O=NOME_DA_SUA_EMPRESA, L=Rio de Janeiro, ST=RJ, C=BR correct? [no]: yes Enter key password for (RETURN if same as keystore password):
2. Caso não deseje registrar o certificado oficialmente, ou seja, que ele seja assinado digitalmente por uma autoridade certificadora, pule para o passo 3.
2.1 Primeiro criamos um pedido de assinatura de certificado (CSR, Certificate Signing Request) para a CA (Certificate Authority):
$ keytool -certreq -keystore /etc/.keystore-tomcat -alias tomcat -file riopro-tomcat.csr
2.2 Agora devemos enviar o arquivo criado, riopro-tomcat.csr, para a CA. Veja com a CA escolhida como fazer isso.
2.3 A CA responderá enviando 2 arquivos:
- Um arquivo *.der, contendo a chave pública da CA
- Um arquivo *.pem, contendo a o nosso certificado assinado com a chave privada da CA
Devemos então importar estes 2 arquivos para o nosso keystore. É importante executar os 2 comandos abaixo na ordem mostrada.
$ keytool -import -alias -file .der -keystore /etc/.keystore-tomcat $ keytool -import -alias -file .pem -keystore /etc/.keystore-tomcat
3. Devemos agora exportar o certificado à ser usado pelo Tomcat (o certificado de alias tomcat ou o certificado assinado pela CA, substitua se for o caso).
$ keytool -export -keystore /etc/.keystore-tomcat -alias tomcat -file /export_keystore-tomcat.cer
4. Agora devemos importar o certificado que exportamos para o keystore do Java. A senha do keystore do Java é por default changeit.
$ keytool -import -alias tomcat -file /export_keystore-tomcat.cer -keystore $JAVA_HOME/jre/lib/security/cacerts
PS.: caso só esteja instalado na máquia o JRE, o keystore do Java estará então em $JAVA_HOME/lib/security/cacerts
5. Por fim, devemos editar o arquivo de configuração do Tomcat em $TOMCAT_HOME/conf/server.xml, e habilitar o conector HTTPS na porta 8443 (ou você pode mudar para qualquer porta. Seguindo o exemplo:
< Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreType="JKS" keystoreFile="/etc/.keystore-tomcat" keystorePass="SUA_SENHA" />
Você pode comentar a parte sobre o conector HTTP se quiser, limitando o acesso à forma HTTPS.
6. Reinicie o Tomcat.



Funciona,
mas e se eu quiser fazer com que só uma área do meu site funcione com https? como faço?
Gerson