Instalar Tomcat e importar certificado SSL existente
Índice del artículo
¡No te enviaremos spam, lo prometemos! Enviamos a nuestros suscriptores nuestro contenido en WordPress, hosting, marketing digital y programación.
-
Responsable:
RAIOLA NETWORK, S.I. C.I.F.: B27453489 Avda de Magoi, 66, Semisótano, Dcha., 27002 Lugo (Lugo) Telefono: +34 982776081 e-mail: info@raiolanetworks.es
-
Finalidad:
Atender solicitudes de información, ejecución de la contratación de servicios y remisión de comunicaciones comerciales.
-
LEGITIMACIÓN:
Consentimiento del interesado y contratación de productos y/o servicios del Responsable
-
Destinatario
No se ceden datos a terceros, salvo obligación legal. Personas físicas o jurídicas directamente relacionadas con el Responsable Encargados de Tratamiento adheridos al Privacy Shield
-
DERECHOS:
Acceder, rectificar y suprimir los datos, portabilidad de los datos, limitación u oposición a su tratamiento, derecho a no ser objeto de decisiones automatizadas, así como a obtener información clara y transparente sobre el tratamiento de sus datos.
-
INFORMACIÓN ADICIONAL:
Se puede consultar la política de privacidad de forma más detallada aquí.
Ú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.
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:
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.
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.
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.
Finalmente se puede comprobar además la cadena de confianza entre certificados.
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.
Tenemos 2 comentarios en "Instalar Tomcat e importar certificado SSL existente"
Hola estuve leyendo tu post, pero creo que en este caso a mi me pasa esto, dado que un excompañero hizo el tramite de un ssl en un nginx, pero ahora me toco a mi meterlo en el Tomcat, pero no se cambio de clave privada , solo se agregaron los dominios a proteger con ssl en godaddy, pero ahora tengo un problema como meter estos certificados y poder importar mi key del nginx al tomcat!!, me podrias decir como
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.