Manual de instalación de Tomcat

¿Que es Tomcat?

Tomcat es un servidor de aplicaciones Java. Basicamente un programa donde pones paginas web

¿Que necesitas saber?
  • Linux
¿Que vas a aprender?

Vas a aprender a instalar un servidor de paginas web en Java. Lo vas a instalar desde cero en una maquina limpia, es decir sin ningun tipo de configuración adicional, solo con la configuración estandar del Sistema operativo Debian 9

¿Comenzamos?

La instalación es muy sencilla ya que debian incluye Tomcat en sus repositorios.

  1. Lo primero actualizaremos el sistema con los siguientes comandos
    $ apt-get update
    $ apt-get upgrade
  2. Instalamos Tomcat 8
    $ apt-get install tomcat8
  3. Instalamos Apache portable runtime(APR), lo necesitaremos para configurar el acceso mediante HTTPS
    $ apt-get install libtcnative-1
  4. En teoría Tomcat ya está instalado y podemos comprobarlo en un navegador web escribiendo en la barra de direcciones: "http://HOST_O_IP:8080" sustituyendo HOST_O_IP por la direccion ip del servidor o por el dominio que tengamos configurado

Configuración de Tomcat 8 para utilizar un protocolo de conexión seguro HTTPS.

Para poder utilizar HTTPS en un servidor web y que el navegador no nos marque la página como insegura necesitamos tener los certificados y claves emitidos por una Autoridad de certificación reconocida por nuestro navegador web, normalmente estas Autoridades te cobran por esos certificados, sin embargo nosotros vamos a usar Let's encrypt, una Autoridad certificadora que emite certificados gratuitos https://letsencrypt.org/.

En adelante sustituiremos bitschool.es con el dominio que estemos configurando
  1. Lo primero instalamos el programa 'certbot' que nos recomendan desde su web para facilitar el proceso
    $ apt-get install certbot
  2. Seguidamente descargaremos los certificados necesarios usando el comando:
    $ certbot certonly

    El programa nos pedirá que elijamos una de las siguientes opciones

    How would you like to authenticate with the ACME CA?
    		-------------------------------------------------------------------------------
    		1: Place files in webroot directory (webroot)
    		2: Spin up a temporary webserver (standalone)
    		-------------------------------------------------------------------------------
    		Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

    Elegiremos la opción 2, y a continuación nos pedirá que introduzcamos el dominio de nuestro servidor

    Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
    		to cancel): bitschool.es

    En el momento de la creación de este manual, certbot descargaba los certificados y claves en el directorio:

    /etc/letsencrypt/archive/bitschool.es/

  3. Creamos un directorio en la carpeta de configuración de tomcat para almacenar los certificados de las distintas paginas que tengamos
    $ mkdir /var/lib/tomcat8/conf/certs
  4. Copiamos los certificados en la nueva carpeta creada
    $ cp -r /etc/letsencrypt/archive/bitschool.es/. /var/lib/tomcat8/conf/certs/bitschool.es/
  5. Configuramos el archivo server.xml para utilizar APR y los certificados que acabamos de copiar

    Para ello debemos encontrar la etiqueta <Connector .... >...</Connector> en el archivo server.xml de nuestra instalación Tomcat, y sustituirlo por:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
    				   maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="bitschool.es" >
    			<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    			
    		<SSLHostConfig hostName="bitschool.es">
    			<Certificate certificateKeyFile="conf/certs/bitschool.es/privkey1.pem"
    				certificateFile="conf/certs/bitschool.es/cert1.pem"
    				certificateChainFile="conf/certs/bitschool.es/chain1.pem"
    				type="RSA" />
    		</SSLHostConfig>
    			
    		</Connector>
  6. Configurar el sistema para usar los puertos estandar

    Por defecto Tomcat utiliza los puertos 8080 para HTTP y 8443 para HTTPS sin embargo los navegadores web usan los puertos 80 y 443 respectivamente, de modo que es un engorro tener que escribir el puerto al final de la url para poder acceder a las paginas web, es por ello que configuraremos nuesto Debian para redireccionar las peticiones, para ello usaremos el programa iptables

    Crearemos dos reglas:

    $ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    $ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
  7. Iptables persistente

    Las reglas de redireccionamiento creadas con iptables se perderán cuando reiniciemos el sistema, de modo que vamos a instalar un programa que las restaurará al reinicio del sistema, de este modo las tendremos siempre activas

    $ apt-get install iptables-persistent

    El programa nos preguntará si queremos guardar las reglas actuales, debemos decirle que si.

  8. Configurar tomcat para utilizar unicamente conexiones seguras

    En el archivo server.xml Buscaremos el conector del puerto 8080:

    <Connector port="8080" protocol="HTTP/1.1" .... redirectPort="8443"...

    Sustituiremos la propiedad redirectPort="8443" por redirectPort="443"

    En el archivo web.xml añadiremos el siguiente fragmento de xml:

    	<security-constraint>
    			<web-resource-collection>
    				<web-resource-name>Protected Context</web-resource-name>
    				<url-pattern>/*</url-pattern>
    			</web-resource-collection>
    			<user-data-constraint>
    				<transport-guarantee>CONFIDENTIAL</transport-guarantee>
    			</user-data-constraint>
    		</security-constraint>
  9. Reinicio del servidor Tomcat
    $ service tomcat8 restart
  10. Si todo ha ido bien tendrás completamente configurado un servidor de aplicaciones Tomcat con los certificados funcionando para usar HTTPS y los puertos estandar 80 y 443