email telefono contacto

Instalar Tomcat e importar certificado SSL existente

Instalar Tomcat e importar certificado SSL existente 1
¡Suscríbete al boletín!

No te enviaremos spam, lo prometemos. Enviamos a nuestros suscriptores contenido sobre WordPress, hosting, marketing digital y programación.

+ Información básica sobre protección de datos

Últimamente en Raiola Networks estamos recibiendo peticiones de clientes que quieren su servidor de aplicaciones Java instalado en uno de nuestros servidores VPS, y es que la versatilidad que ofrecen nuestros VPS nos permite realizar la configuración que sea necesaria para tu proyecto web. Tan sólo dinos qué sistema operativo necesitas y qué versiones de qué software, sino lo tienes claro contacta con nosotros y te asesoraremos buscando la mejor solución para ti y entregándote el servidor VPS que realmente necesitas.

xestionproxectos

En este artículo voy a centrarme en Apache Tomcat que es uno de los servidores de aplicaciones Java más usados. Es software libre y cuenta con una grandísima comunidad a su alrededor, triunfando entre los desarrolladores Java por su ligereza, su simplicidad, su bajo consumo de recursos, su cantidad de módulos disponibles y su experiencia en el terreno, yendo ya por la versión 9 desde su estreno en 1999. Todo depende de los requerimientos de la aplicación, si es una aplicación básica la mejor opción está en un Tomcat o un Jetty, si por el contrario estamos hablando de una aplicación o servicio web crítico o de elevada complejidad es mejor explorar otras opciones como puede ser Glassfish. Aquí podemos ver una pequeña gráfica sobre la popularidad de estos servidores:

javaservidoresranking

A continuación voy a explicar cómo instalar Tomcat en uno de nuestro servidores VPS con CentOS 6 de 64bits y hacerlo funcionar con un certificado SSL existente, algo que parece trivial pero para lo cual hay que hacer un pequeño apaño para conseguir importar el certificado.

Instalar Java en el VPS

Voy a ir paso por paso, empezando por la configuración del entorno de pruebas en uno de nuestros servidores VPS y posteriormente con la importación de un certificado SSL generado de manera externa en otro servidor. Para comenzar es necesario instalar y configurar la versión de Java que nos sea necesaria. En este ejemplo se instalará Java 7 introduciendo los siguientes comandos:

cd /opt/

curl -j -k -L -H "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" https://download.oracle.com/errors/download-fail-1505220.html | tar xz

alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 1 && \
alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 1 && \
alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 1

En caso de tener algún entorno Java previamente instalado, debes modificar el número de instalación con alternatives por el que corresponda y posteriormente configurarlo para usar la versión de Java que se acaba de instalar:

alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2 && \
alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 2 && \
alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 2

alternatives --config java

Hay 2 programas que proporcionan 'java'.

Selección Comando
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.5.0-gcj/bin/java
2 /opt/jdk1.7.0_79/bin/java

Presione Intro para mantener la selección actual[+], o escriba el número de la selección: 2

Finalmente se comprueba la versión de Java y se añaden además las variables de entorno, por ejemplo añadiendo estas líneas al archivo .bashrc:

java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

vi /root/.bashrc

export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/jre/bin

Instalar Apache Tomcat

Una vez se encuentra el entorno Java correctamente configurado, se procede a realizar una instalación rápida del servidor Tomcat. Lo primero que se debe hacer es descargar la versión que necesitemos para nuestra aplicación Java desde el sitio oficial de Apache Tomcat.

cd /opt

curl  | tar xz

Tomcat viene preparado para funcionar de inmediato simplemente lanzando un script. La configuración predeterminada tiene habilitado el puerto 8080 para que Tomcat ‘escuche’ las peticiones HTTP en este puerto. Posteriormente en este tutorial se editará el archivo de configuración de Tomcat para añadir la configuración correspondiente al tráfico HTTPS. Véase como ejemplo la configuración por defecto que trae la nueva instalación de Tomcat:

vi /opt/apache-tomcat-7.0.64/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

Tomcat cuenta con una serie de scripts que facilitan entre otras tareas la inicialización y la parada del servicio. En este escenario y si todo ha salido bien, el servidor Tomcat ya se encontrará funcionando y escuchando en el puerto 8080 una vez se ejecute el script de inicio./opt/apache-tomcat-7.0.64/bin/startup.sh

Using CATALINA_BASE: /opt/apache-tomcat-7.0.64
Using CATALINA_HOME: /opt/apache-tomcat-7.0.64
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.64/temp
Using JRE_HOME: /opt/jdk1.7.0_79
Using CLASSPATH: /opt/apache-tomcat-7.0.64/bin/bootstrap.jar:/opt/apache-tomcat-7.0.64/bin/tomcat-juli.jar
Tomcat started.


 tomcatnossl

Configurar Tomcat

Ahora que se ha hecho funcionar mínimamente Tomcat, lo lógico es querer configurarlo para el propósito que se necesite. Si simplemente se quería realizar algún experimento o prueba de una aplicación Java, con esta instalación sería más que suficiente. Sin embargo si el servidor va a ser usado en un sistema en producción, se debería realizar una configuración a conciencia del servidor. Para esta prueba de concepto voy realizar una configuraciones mínimas para que sea más cómodo trabajar con Tomcat.

Para facilitar el arranque y la parada del servidor Tomcat lo recomendable es añadirlo a los servicios del sistema. Para ello hay que crear un script de inicialización y parada en la misma ubicación donde se encuentran los scripts del resto de servicios del sistema, es decir /etc/init.d. En este script se deben invocar a los scripts propios de Tomcat que se habían mencionado anteriormente para encender y apagar el servidor web Java. Aquí dejo el código, sólo hay que darle permisos 755 para que pueda ser ejecutado:

vi /etc/init.d/tomcat

#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/jre/bin
CATALINA_HOME=/opt/apache-tomcat-7.0.64

case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac

exit 0
chmod 755 /etc/init.d/tomcat

service tomcat start

Using CATALINA_BASE: /opt/apache-tomcat-7.0.64
Using CATALINA_HOME: /opt/apache-tomcat-7.0.64
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.64/temp
Using JRE_HOME: /opt/jdk1.7.0_79
Using CLASSPATH: /opt/apache-tomcat-7.0.64/bin/bootstrap.jar:/opt/apache-tomcat-7.0.64/bin/tomcat-juli.jar
Tomcat started.

service tomcat stop

Using CATALINA_BASE: /opt/apache-tomcat-7.0.64
Using CATALINA_HOME: /opt/apache-tomcat-7.0.64
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.64/temp
Using JRE_HOME: /opt/jdk1.7.0_79
Using CLASSPATH: /opt/apache-tomcat-7.0.64/bin/bootstrap.jar:/opt/apache-tomcat-7.0.64/bin/tomcat-juli.jar

Para que el servicio Tomcat que se acaba de configurar se ejecute con el arranque del sistema, se debe de usar el comando chkconfig y añadirlo en los niveles de ejecución que se desee. Para este caso por ejemplo se puede lanzar en la shell algo por el estilo:

cd /etc/init.d
chkconfig --add tomcat
chkconfig --level 234 tomcat on
chkconfig --list tomcat
tomcat 0:off 1:off 2:on 3:on 4:on 5:off 6:off

Otro aspecto interesante a configurar son los paneles de administración y herramientas que ofrece Tomcat para que la interacción con el servidor sea más agradable. Una manera rápida de configurar un acceso a toda esta serie de utilidades sería crear a un usuario con todos los roles posibles haciendo algo como esto:

vi /opt/apache-tomcat-7.0.64/conf/tomcat-users.xml

<role rolename="manager-gui"/>;
<role rolename="manager-script"/>;
<role rolename="manager-jmx"/>;
<role rolename="manager-status"/>;
<role rolename="admin-gui"/>;
<role rolename="admin-script"/>;
<user username="tomcat" password="tomcatpass" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>;

Una vez establecidos los roles del usuario se tendrá acceso a distintos a los paneles pero no explicaré su utilidad ya que el objetivo del artículo es configurar Tomcat con SSL.

gestorappstomcat

gestorhoststomcat

tomcatstatus

Importar el certificado SSL

Llega ahora el momento de configurar SSL en el servidor Tomcat instalado. Los sistemas Java usan un almacén de certificados propio o keystore que es la base de datos de las claves privadas y sus certificados asociados. Para manipular este almacén Java cuenta con la utilidad keytool que se encuentra distribuida entre los binarios del entorno de desarrollo de Java. Se podría decir que keytool es el equivalente OpenSSL pero más limitado en funcionalidades y exclusivamente ligado al entorno Java.

Una utilidad muy práctica de keytool es la generación de pares de claves, ya que automáticamente almacena la clave pública dentro de un certificado autofirmado. Lógicamente este certificado no sería válido para un entorno en producción ya que no proviene de una autoridad certificadora de confianza, pero serviría perfectamente para hacer pruebas de aplicaciones SSL. Para generar el keystore con el certificado autofirmado, no hay más que introducir:

keytool -genkey -alias [cambiar] -keyalg RSA -keystore servidor.keystore

Sin embargo keytool no cuenta con la funcionalidad de importar una clave privada preexistente y un certificado generado externamente. Existe una solución a este pequeño inconveniente que quizás a primera vista no se contempla con tanta claridad y es que Java (a partir de su versión 6) puede manejar los ficheros PKCS12 como si fuesen almacenes de claves keystores. Por lo que echando mano del anteriormente mencionado OpenSSL se puede convertir el certificado y la clave privada que se quieren importar, en un archivo PKCS12 de intercambio de información personal. Lógicamente se necesitarán los certificados, tanto el propio como los de la autoridad certificadora, y la clave privada que serán pasados a OpenSSL como parámetros. También hay que indicar el nombre del fichero PKCS12 de salida que se desea generar.

Un dato importante es que la contraseña que se establezca al crear el archivo PKCS12 debe ser la misma que la contraseña del keystore de Java para que Tomcat funcione correctamente. Para generar el archivo PKCS12 se debe introducir:

openssl pkcs12 -export -in certificado.pem -inkey claveprivada.pem -out midominio.p12 -name [cambiar] -CAfile autoridad.crt -caname root

Y finalmente y ahora sí tirando provecho de la herramienta keytool, se puede importar el archivo PCKS12 generado como si de un keystore se tratase.

keytool -importkeystore -deststorepass [cambiar] -destkeypass [cambiar] -destkeystore servidor.keystore -srckeystore midominio.p12 -srcstoretype PKCS12 -srcstorepass [cambiar] -alias [cambiar]

Para configurar el servidor Tomcat sobre SSL usando el certificado correctamente importando en el almacén de certificados de Java, se debe añadir la siguiente configuración que habilitará el puerto que indiquemos para todo el tráfico HTTPS:

vi /opt/apache-tomcat-7.0.64/conf/server.xml

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/path/to/servidor.keystore" keystorePass="contraseñaKeystore" />;

Si se reinicia Tomcat y se comprueba mediante el navegador, se puede observar que funciona correctamente. Sin embargo en este el navegador muestra un error de validación debido a que se está accediendo a través de la IP cuando un certificado debe estar siempre ligado a un dominio. Esto desaparecerá cuando se configure el dominio a quien pertenece el certificado con Tomcat.

tomcatssl

Finalmente se puede comprobar además la cadena de confianza entre certificados.

sslchecktomcat

Si buscas instalar Apache Tomcat en tu servidor VPS y no consigues configurarlo, puedes contactar con nosotros sin compromiso y te ayudaremos a resolver el problema para que puedas ejecutar tus aplicaciones Java.

Noé Núñez
Noé Núñez

Mi nombre es Noé Núñez, ingeniero informático por la UDC, SysAdmin en Raiola Networks y amante de los sistemas y las redes en general. Surfeando la red desde que tengo uso de razón.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 2 comentarios en "Instalar Tomcat e importar certificado SSL existente"
  • Hola Fernando, lamentablemente no puedo ayudarte con este tema ya que te tendría que contestar un sysadmin. Si buscas servicios profesionales de este tipo contacta con nosotros a través de enlace

    Un saludo.

    • Hola Fernando, lamentablemente no puedo ayudarte con este tema ya que te tendría que contestar un sysadmin. Si buscas servicios profesionales de este tipo contacta con nosotros a través de enlace

      Un saludo.

  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    ¿Vienes de otro proveedor?

    ¡Ningún problema! Te migramos gratis y sin cortes
    cohete raiola