Informações iniciais
Hoje (03/08/2016), a versão do Tomcat mais recente e recomendada para uso em produção é a 8.5.4, que pode ser obtida nesta página: https://tomcat.apache.org/download-80.cgi
Para usar o Tomcat 8 é necessário instalar o Java 8. O Java 8 da Oracle pode ser obtido neste link http://www.oracle.com/technetwork/java/javase/downloads/index.html e instalado no Ubuntu seguindo este tutorial: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html
O Tomcat padrão contém algumas vulnerabilidades de segurança e para minimizá-las é necessário customizá-lo.
Customizando o Tomcat
1- Foi obtido o Tomcat 8.5.4 acessando a página https://tomcat.apache.org/download-80.cgi. Com isso foi baixado o arquivo apache-tomcat-8.5.4.zip no diretório /home/aecio/Downloads.
2- Descompacte o arquivo apache-tomcat-8.5.4.zip e altere o nome da pasta descompactada para tomcat8.
cd /home/aecio/Downloads
unzip apache-tomcat-8.5.4.zip
mv apache-tomcat-8.5.4/ tomcat8
3- Algumas configurações de segurança são listadas nesta página: https://www.owasp.org/index.php/Securing_tomcat
4- Mantenha comentado todos os usuários listados no arquivo tomcat8/conf/tomcat-users.xml. Isso evitará que qualquer usuário possa gerenciar o Tomcat via Web. Todas as configurações no Tomcat devem ser feitas via linha de comando ou edição de arquivos.
5- Altere o arquivo tomcat8/conf/server.xml para conter:
Antes:
<Server port="8005" shutdown="SHUTDOWN">
Depois:
<Server port="-1" shutdown="Shutd0wn-ADICIONE-OUTRA-PALAVA-DIFICIL">
6- Altere a porta padrão do HTTP de 8080 para 80 no arquivo tomcat8/conf/server.xml .
Antes:
<Connector port="8080" protocol="HTTP/1.1"
Depois:
<Connector port="80" protocol="HTTP/1.1"
7- Remova os diretórios existentes dentro de tomcat8/webapps/.
rm -rf tomcat8/webapps/docs
rm -rf tomcat8/webapps/examples
rm -rf tomcat8/webapps/host-manager
rm -rf tomcat8/webapps/manager
8- Remova o diretório tomcat8/conf/Catalina/
rm -rf tomcat8/conf/Catalina
9- Oculte a versão do Tomcat.
cd tomcat8/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
cd org/apache/catalina/util/
Edite o arquivo ServerInfo.properties e altere a seguinte linha:
Antes:
server.info=Apache Tomcat/8.5.4.0
Depois:
server.info=Apache Tomcat
Empacote o arquivo novamente.
cd /home/aecio/Downloads/tomcat8/lib
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
rm -rf org/
cd ..
10- Crie o usuario tomcat e defina uma senha difícil para ele.
sudo adduser tomcat
ou:
sudo useradd tomcat
sudo passwd tomcat
Mova o tomcat8 para o diretório /opt e aplique a permissão 700 para o usuário tomcat.
sudo mv /home/aecio/Downloads/tomcat8 /opt
sudo chmod -R 700 /opt/tomcat8
sudo chown -R tomcat:tomcat /opt/tomcat8
11- Se quiser habilitar a porta do HTTPS e usar um certificado válido emitido por uma autoridade certificadora como a GlobalSign ou outra, siga o seguintes passos:
a) Cadastre o o certificado emitido pela autoridade certificadora (no formato .pfx) num arquivo /etc/certs/keystore.jks e os certificados raíz e intermediário num arquivo/etc/certs/cacerts.jks (veja os links abaixo).
https://support.globalsign.com/customer/en/portal/articles/2121490-java-keytool—create-keystore
https://docs.oracle.com/cd/E19798-01/821-1841/gjrgy/index.html
https://docs.oracle.com/cd/E19798-01/821-1751/ghlgv/index.html
Dê permissões de acesso ao usuário tomcat para o diretório /etc/certs.
sudo chmod -R 700 /etc/certs
sudo chown -R tomcat:tomcat /etc/certs
b) Habilite o HTTPS na porta 443 usando a configuração abaixo no arquivo tomcat8/server.xml. Isso dará suporte apenas ao protocolo TLS1.2 com cifras fortes.
<Connector port="443" maxThreads="150" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true" clientAuth="false"
SSLEnabled="true" sslProtocol="TLSv1.2" sslEnabledProtocols="TLSv1.2" keyAlias="alias-cert"
keystoreFile="/etc/certs/keystore.jks" keystorePass="changeit"
keystoreType="JKS" truststoreFile="/etc/certs/cacerts.jks"
truststorePass="changeit" truststoreType="JKS"
ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
/>
Essas configurações de segurança do protocolo HTTPS foram obtidas em:
https://tomcat.apache.org/tomcat-8.0-doc/security-howto.html
https://www.owasp.org/index.php/Securing_tomcat
http://www.maximporges.com/2009/11/18/configuring-tomcat-ssl-clientserver-authentication/
https://blog.eveoh.nl/2014/02/tls-ssl-ciphers-pfs-tomcat/
https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
https://www.digicert.com/ssl-certificate-installation-tomcat.htm
https://www.mulesoft.com/tcat/tomcat-ssl
https://www.sslshopper.com/tomcat-ssl-installation-instructions.html
https://support.globalsign.com/customer/en/portal/articles/1223425-tomcat—install-ssl-certificate
http://www.mkyong.com/tomcat/how-to-configure-tomcat-to-support-ssl-or-https/
https://www.geocerts.com/install/tomcat
12- Crie o arquivo /etc/init.d/tomcat com o seguinte conteúdo.
---------------------------- /etc/init.d/tomcat ------------------------
#!/bin/bash
# chkconfig: 345 88 88
# description: tomcat (TOMCAT) Tomcat
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $local_fs $network $syslog
# Should-Start: $remote_fs $named $time
# Required-Stop: $local_fs $network $syslog
# Should-Stop: $remote_fs $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: TOMCAT
# Description: tomcat (TOMCAT) Tomcat
### END INIT INFO
#----------------------------------------------------
# informa se o usuario que estah rodando o comando eh root
isroot(){
MYUID=$(id | cut -d= -f2 | cut -d\( -f1)
[ $MYUID -eq 0 ] && echo YES || echo NO
}
#--------------------------------
getPID(){
#PID=$(ps ax | pgrep -fl $TOMCATEXEC | sed "s/^ *//" | cut --field=1 --delimiter=" " | head -n1)
PID=$(ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }')
echo $PID > $PID_FILE
}
#--------------------------------
isRunning(){
local PID="$1"
[ -z "$PID" ] && return 1
ps -p $PID > /dev/null 2>&1 && return 0 || return 1
}
#--------------------------------
status(){
getPID
[ -f $PID_FILE ] || return 3
PID=$(cat $PID_FILE )
if [ -z "$PID" ]; then
echo "[INFO] Tomcat is not running..."
return 1
fi
if isRunning $PID; then
echo "[INFO] Tomcat is running: PID=$PID"
return 0
else
echo "[INFO] Tomcat is not running..."
return 1
fi
}
#--------------------------------
stop(){
if [ ! -f $PID_FILE ]; then
echo "[INFO] Tomcat is not running..."
return 0
fi
PID=$(cat $PID_FILE )
[ -z "$PID" ] && return 0
if isRunning $PID ; then
echo "[INFO] Stopping Tomcat..."
kill -9 $PID
sleep 2
return 0
fi
}
#--------------------------------
start(){
if [ -f $PID_FILE ]; then
PID=$(cat $PID_FILE )
if [ -z "$PID" ]; then
echo "[INFO] Starting Tomcat..."
cd $TOMCATDIR
$TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
cd - > /dev/null &
getPID
return 0
fi
if isRunning $PID; then
echo "[INFO] Tomcat is already running. Use \"restart\""
return 0
else
echo "[INFO] Starting Tomcat..."
cd $TOMCATDIR
$TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
cd - > /dev/null &
getPID
return 0
fi
else
echo "[INFO] Starting Tomcat..."
cd $TOMCATDIR
$TOMCAT_SCRIPT_STARTUP > /dev/null 2>&1 &
cd - > /dev/null &
getPID
return 0
fi
}
#--------------------------------
# MAIN
#--------------------------------
#-----------Variaveis
TOMCATEXEC=tomcat
TOMCATDIR=/opt/tomcat8
TOMCAT_SCRIPT_STARTUP=/opt/tomcat8/bin/startup.sh
PID_FILE=/tmp/tomcat.pid
if [ $(isroot) = NO ] ; then
echo "[ERROR] Voce deve ser root para executar este comando."
echo "Execute o comando \"sudo $CMDLINE\""
exit 4
fi
# Define usage string, used in more than one place.
usage="[INFO] Usage: $0 {start|stop|restart|status}"
# Check that we have one parameter: action
if [ $# -ne 1 ] ; then
if [ $# -lt 1 -o "$1" = "" ] ; then
echo "[ERROR] $0: action not specified"
else
echo "[ERROR] $0: too many parameters"
fi
echo "$usage"
exit 2
fi
action="$1"
case $action in
start)
start
RETURN=$?
;;
stop)
stop
RETURN=$?
;;
restart)
stop
start
RETURN=$?
;;
status)
status
RETURN=$?
;;
*)
# If we don't recognize action, consider it an invalid argument.
# If the standard adds actions we don't support, exit should be 3 for those.
echo "[ERROR] $0: action \"$action\" not recognized"
echo "$usage"
exit 3
;;
esac
exit $RETURN
----------------------- end of /etc/init.d/tomcat ----------------------
13- Dê permissão de execução ao script /etc/init.d/tomcat.
sudo chmod 755 /etc/init.d/tomcat
sudo chown root:root /etc/init.d/tomcat
14- Habilite a inicialização do Tomcat no boot do Sistema Operacional.
No Debian/Ubuntu:
sudo update-rc.d -f tomcat defaults
No CentOS/RedHat 6.x:
sudo chkconfig --add /etc/init.d/tomcat
sudo chkconfig tomcat on
15- Inicie o Tomcat com o comando abaixo.
sudo /etc/init.d/tomcat start
Deixe um comentário