wiki:ins_tomcat8_produccion

Inicio > Actividades en el 2019 > Estudiando lenguaje Java > Instalación de Murachí - Entorno de Producción Debian 9


Instalación y configuración de Murachí con Apache Tomcat 8 (SSL) en Entorno de Producción


1. Requerimientos

  • Debian 9
  • Apache Tomcat 8
  • Default-jre 8
  • Default-jdk 8

Notas:

  • Usaremos $ para describir los comandos que se usaran con usuario regular.
  • Usaremos # para describir los comandos que se usaran con superusuario.


2. Instalación de Apache Tomcat 8

  1. Instalar Tomcat 8 desde el repositorio de Debian 9
    # apt-get install tomcat8 tomcat8-admin tomcat8-examples tomcat8-docs
    

La estructura de directorio para Tomcat 8 instalado desde el repositorio de Debian es la siguiente:

En /var/lib/tomcat8 están los fuentes del servicio Apache Tomcat8:

  • conf - ficheros XML y los correspondientes DTD para la configuración de Tomcat, el cual esta enlazado a /etc/tomcat8
  • logs - logs de Catalina y de las aplicaciones, el cual esta enlazado a /var/log/tomcat8
  • webapps - directorio que contiene las aplicaciones web.
  • work - almacenamiento temporal de ficheros y directorios.

El daemon de Tomcat8 se ejecuta mediante systemd e init.d, sus configuración y guiones de arranque se encuentran en /etc/init.d/tomcat8 y /etc/default/tomcat8

  1. Para detener o iniciar el servicio de Tomcat se utiliza systemd o init.d:
    # systemctl stop tomcat8
    # systemctl start tomcat8
    # /etc/init.d/tomcat8 stop
    # /etc/init.d/tomcat8 start
    
  1. Finalmente se levanta el navegador de su preferencia y coloca la ruta http://localhost:8080 (ver figura 1)

Figura 1. Interfaz de Apache Tomcat8

En la interfaz podemos observar tres secciones:

  • tomcat8-docs: La cual es la documentación oficial de Apache Tomcat8
  • tomcat8-examples: Ejemplos de aplicaciones del servicio Apache Tomcat8
  • tomcat8-admin: Sistema de administración del Apache Tomcat
    • "Manager WebApp?" -> (Aplicación de administrador )
    • "Host-Manager WebApp?" -> (gerente de host)
  1. Editar los roles del servicio tomcat, los roles que se pueden encontrar son:
    • manager-gui -> Acceso a la interfaz HTML
    • manager-status -> Acceso a la pagina Estado del servidor
    • manager-script
    • manager-jmx

Para nuestro caso solo vamos a utilizar o definir los roles manager-gui y manager-status

  1. Agregar dentro del archivo tomcat-user.xml los permisos de usuarios para el Tomcat
    # cd /etc/tomcat8/
    # vim tomcat-user.xml
    

Donde vamos agregar la siguiente sección:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
<user username="admin" password="s3cret" roles="admin-gui"/>
</tomcat-users>
  1. Guardar los cambios y reiniciar el servicio tomcat.
    # systemctl restart tomcat8
    
  1. Finalmente se prueba los roles creados en la pagina httplocalhost:8080 haciendo clic en el botón Manager WebApp?'. Se introduce el usuario y contraseña asignada en el archivo tomcat-user.xml

Figura 2. Interfaz gráfica autenticación para acceder a Manager Web App


Figura 3. Interfaz gráfica de Manager Web App

Hasta este instante se tiene corriendo el servidor Apache Tomcat 8 (que es un contenedor de aplicaciones web) y se configuro los usuarios para acceder a las diferentes secciones. Ahora procederemos a mostrar los pasos para correr una aplicación web en el contenedor Apache tomcat 8 para la misma debemos de disponer un archivo de aplicación web (.war) (Nota: WAR es un archivo JAR utilizado para distribuir una colección de JavaServer? Pages, servlets, clases Java, archivos XML, bibliotecas de tags y páginas web estáticas (HTML y archivos relacionados) que juntos constituyen una aplicación web. ) -> https://es.wikipedia.org/wiki/WAR_(archivo)

Para este manual vamos a correr el servidor Murachí que se dispone del archivo .war en el siguiente enlace Murachi.war


3. Implementación del servicio Murachí (.war)

3.1 Cargar archivo .war

Para cargar un archivo .war en Tomcat se puede realizar de dos maneras:

  1. Desde un terminal:
    1.1. Descargar el archivo Murachi.war al HOME.
    1.2. Luego se mueve el archivo al directorio /var/lib/tomcat8/webapps/
    # mv Murachi.war /var/lib/tomcat8/webapps/
    

  1. Usando la interfaz gráfica del servidor Tomcat:
    2.1. Ir a la sección Manager WebApp?.
    2.2. Bajar hasta la sección Archivo WAR a desplegar o WAR file to deploy (ver figura 4).
    2.3. Hacer clic en el botón Seleccionar archivo luego de seleccionar el archivo Murachi.war hacer clic en el botón Desplegar (ver figura 5).
    2.4. Una ves cargado y desplegado en archivo Murachi.war se puede observar en la sección Aplicaciones donde se visualizan las aplicaciones que están contenida en el servidor Tomcat que ya aparece la aplicación Murachi (ver figura 6).

Figura 4. Sección Archivo WAR a desplegar


Figura 5. Selección del archivo Murachi.war a desplegar


Figura 6. Sección Aplicaciones - Lista de aplicaciones en Tomcat

  1. Crear un directorio con el nombre de murachiWorkingDirectory en el servidor Tomcat donde se almacenara los archivos que se van a firmar:
    # cd /var/lib/tomcat8/
    # mkdir murachiWorkingDirectory
    # chown -R tomcat8:tomcat8 murachiWorkingDirectory/
    # mkdir /var/lib/tomcat7/
    # cd  /var/lib/tomcat7/
    # ln -s ../tomcat8/murachiWorkingDirectory/
    

Nota: Se crea el directorio /var/lib/tomcat7/ y el enlace simbólico a ../tomcat8/murachiWorkingDirectory debido a que MurachiRest? requiere un directorio llamado /var/lib/tomcat7/


3.2 Crear y configurar un certificado SSL

Para la implementación del servicio Murachí es necesario que se ejecute mediante el protocolo HTTPS (SSL), por tal motivo se debe crear y configurar el certificado SSL para el servicio, en caso de tener una capa Proxy, el mismo hospedará el certificado y las configuraciones para abrir el puerto 443.

En el caso de no poseer capa Proxy, se debe crear y configurar el certificado SSL en el servidor donde se esta implementando el servicio Murachí, para este este caso a continuación se describe un ejemplo de la creación de un certificado auto-firmado y la configuración necesaria para que se ejecute con el Apache Tomcat.

  1. Crear el par de clave (publica y privada) del certificado auto-firmado, donde se indica la creación de una solicitud (crt) de certificado x509, usando algoritmo sha256, la creación de claves (key) con tamaño 2048 y la salida en los archivos tomcat.key y tomcar.crt
    root@debian9:/var/lib/tomcat8# openssl req -x509 -sha256 -newkey rsa:2048 -keyout tomcat.key -out tomcat.crt -days 1024 -nodes
    Generating a RSA private key
    ...........+++++
    .....................+++++
    writing new private key to 'tomcat.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:VE
    State or Province Name (full name) [Some-State]:Merida
    Locality Name (eg, city) []:Merida
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Fundacion Cenditel
    Organizational Unit Name (eg, section) []:Seguridad
    Common Name (e.g. server FQDN or YOUR name) []:Murachi
    Email Address []:seguridad@cenditel.gob.ve
    root@debian9:/var/lib/tomcat8#  
    
  2. Exportar ambos archivos que se generaron en la sección anterior (tomcat.crt y tomcat.key) al almacén de claves keystore
    root@debian9:/var/lib/tomcat8# openssl pkcs12 -export -out keystore.pkcs12 -in tomcat.crt -inkey tomcat.key
    Enter Export Password:
    Verifying - Enter Export Password:
    root@debian9:/var/lib/tomcat8#
    
  3. Instalar el archivo de certificado en el almacén de claves:
    # keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS
    
  4. Para la configuración del Conector SSL (Tomcat necesitará un conector SSL configurado para poder aceptar las conexiones seguras) abrir el archivo server.xml que se encuentra en /var/lib/tomcat8/conf.
    root@debian9:/var/lib/tomcat8/conf# vim server.xml
    
  5. Buscar el conector que desea proteger con el nuevo almacén de claves y, si es necesario, elimine el comentario (generalmente, se trata de un conector con el puerto 443 o 8443 como se muestra en el ejemplo siguiente). Especifique el nombre de archivo y la contraseña correctos del almacén de claves en la configuración del conector. Cuando finalice, el conector debe tener una apariencia similar al siguiente ejemplo:
     <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the BIO implementation that requires the JSSE
         style configuration. When using the APR/native implementation, the
         OpenSSL style configuration is required as described in the APR/native
         documentation -->
    
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
         maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
         clientAuth="false" sslProtocol="TLS" 
         keystoreFile="/var/lib/tomcat7/keystore.jks" keystorePass="123456"
        /
    
    
  6. Guardar los cambios en el archivo server.xml y se procede a reinicie Tomcat. Para verificar el funcionamiento del certificado ssl se procede a levantar un navegador de su preferencia y vuelva a levantar el servidor pero agregando el protocolo https (https://localhost:8443/). En este manual el certificado es auto-firmado se debe ejecutar los siguientes pasos:
    • Aceptar el certificado auto-firmado:

Figura 7. Aceptar el certificado auto-firmado

  • Añadir agregar excepción de seguridad:

Figura 8. Confirmar excepción de seguridad

  • Finalmente se puede observar la interfaz de configuración de Tomcat:

Figura 9. Interfaz de Tomcat con SSL

  1. Para cambiar los puertos de los protocolos HTTP y HTTPS que el servicio Tomcat trae, se debe ejecutar los siguientes pasos:
    • Activar la opción de AUTHBIND en el archivo /etc/default/tomcat8
      # vim /etc/default/tomcat8
      
      AUTHBIND=yes
      
    • Editar los puertos en el archivo server.xml
      # vim /etc/tomcat8/server.xml
      
          <!-- A "Connector" represents an endpoint by which requests are received
               and responses are returned. Documentation at :
               Java HTTP Connector: /docs/config/http.html
               Java AJP  Connector: /docs/config/ajp.html
               APR (HTTP/AJP) Connector: /docs/apr.html
               Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
          -->
          <Connector port="80" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="443" />
      .
      .
      .
      
          <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
               This connector uses the NIO implementation. The default
               SSLImplementation will depend on the presence of the APR/native
               library and the useOpenSSL attribute of the
               AprLifecycleListener.
               Either JSSE or OpenSSL style configuration may be used regardless of
               the SSLImplementation selected. JSSE style configuration is used below.
          -->
          <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
      	       maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                     clientAuth="false" sslProtocol="TLS" 
                     keystoreFile="/var/lib/tomcat8/keystore.jks" keystorePass="123456" />
      
  • Reiniciar el servicio
    systemctl restart tomcat8
    
  • Para cambiar el nombre de Dominio del servicio, se debe editar el archivo server.xml, agregando la linea de Alias:
    # vim /etc/tomcat8/server.xml
    
          <Host name="localhost"  appBase="webapps"
    	      unpackWARs="true" autoDeploy="true">
    	      <Alias>murachi.prueba.cenditel.gob.ve</Alias>
    

Figura 10. Interfaz de Tomcat con SSL y su dominio

Referencia: https://unpocodejava.com/2016/04/29/como-crear-un-certificado-autofirmado-para-tomcat-y-nginx/

Nota: En caso de tener un servidor proxy y el proporcionará el servicio https con los certificados SSL, se debe obviar todos los pasos anteriores y solo agregar las siguientes lineas en server.xml:

root@debian9:/var/lib/tomcat8/conf# vim server.xml 
        <!-- Mark HTTP as HTTPS forward from SSL termination at nginx proxy -->
        <Valve className="org.apache.catalina.valves.RemoteIpValve"
               remoteIpHeader="x-forwarded-for"
               remoteIpProxiesHeader="x-forwarded-by"
               protocolHeader="x-forwarded-proto"
               internalProxies="X\.X\.X\.X"/>

Donde X.X.X.X es la dirección IP de escucha del servicio Proxy.

Posteriormente agregar las siguientes lineas en web.xml (@@ -391,18 +391,6 @@)

root@debian9:/var/lib/tomcat8/conf# vim web.xml 
     <!-- agregado para redirigir trafico HTTP a HTTPS -->
     <security-constraint>
         <web-resource-collection>
                 <web-resource-name>Protected Context</web-resource-name>
                 <url-pattern>/*</url-pattern>
         </web-resource-collection>
        <!-- auth-constraint goes here if you requre authentication -->
         <user-data-constraint>
                 <transport-guarantee>CONFIDENTIAL</transport-guarantee>
         </user-data-constraint>
     </security-constraint>


4. Implementación de un Portal WEB de pruebas para obtener la Versión del servicio Murachí

  1. Descargar el portal que se tiene disponible en formato .war -> Descargar.
  1. Ejecutar el proceso de cargar y desplegar en el servidor Tomcat, para la misma debemos realizar los pasos de la sección anterior: 3. Implementación del servicio Murachí (.war) > 3.1 Cargar archivo .war
  1. Editar el portal modificando el dominio del servicio Murachí a consumir, en este sentido se procede a cambiar en el método $.ajax la propiedad url la dirección de la petición que apunte al entorno de producción. Entonces, se debe acceder al directorio /var/lib/tomcat8/webapps/VersionApiMurachi/ y editar el archivo VersionApiMurachi?.html
    # cd /var/lib/tomcat8/webapps/VersionApiMurachi/
    

Con el editor de su preferencia proceda a modificar en todos los método de $.ajax la propiedad url, ejemplo:

$.ajax({
   url: "https://murachi.prueba.cenditel.gob.ve/Murachi/0.1/archivos",
  1. Reiniciar el servicio Tomcat
  1. Ejecutar el portal (VersionApiMurachi?) haciendo clic en el enlace o escribiendo https://murachi.prueba.cenditel.gob.ve/VersionApiMurachi desplegara el portal que realiza el consumo de la versión del servicio de Murachí (ver figura 11)

Figura 11. Portal Web de pruebas'''VersionApiMurachi'''

  1. Para consultar la versión del servicio Murachí hacer clic al boton Enviar. Ver figura 12

Figura 12. Consumo de la Versión del servicio Murachí


5. Implementación de un Portal Web para el consumo del servido Murachí

Para poder realizar el consumo de los servicios de Murachí debemos cargar un portal que realiza las consultas para verificar y firmar electrónicamente documentos usando el formato pdf como bdoc.

  1. Descargar el portal que se tiene disponible en formato .war -> Descargar.
  1. Ejecutar el proceso de cargar y desplegar en el servidor Tomcat, para la misma debemos realizar los pasos de la sección anterior: 3. Implementación del servicio Murachí (.war) > 3.1 Cargar archivo .war
  1. Editar el portal modificando el dominio del servicio Murachí a consumir, en este sentido se procede a cambiar en el método $.ajax la propiedad url la dirección de la petición que apunte al entorno de producción. Entonces, se debe acceder al directorio /var/lib/tomcat8/webapps/pruebaservicioweb/ y editar el archivo index.html
    # cd /var/lib/tomcat8/webapps/pruebaservicioweb/
    

Con el editor de su preferencia proceda a modificar en todos los método de $.ajax la propiedad url, ejemplo:

$.ajax({
   //url: "https://murachi.prueba.cenditel.gob.ve/Murachi/0.1/archivos",
  1. Guardar los cambios y reiniciar el tomcat.
  1. Ejecutar el portal (pruebaservicioweb) haciendo clic en el enlace o escribiendo https://murachi.prueba.cenditel.gob.ve/pruebaservicioweb desplegara el portal que realiza el consumo del servicio de Murachí (ver figura 13)

Figura 13. Tomcat -> Portal para consumir el servicio de Murachí

  1. Para el consumo del servicio de Murachí se requeire instalar un complemento de firma en el navegador Chrome quien será el encargado de gestionar los dispositivos criptográficos, en tal sentido debe realizar la instalación del mismo siguiendo los paso de instalación descrito en el siguiente enlace Configuración instalación del complemento.
  1. Finalmente el portal esta listo para consumir los servicio de Murachí desde su servidor de prueba.
Last modified 5 years ago Last modified on Oct 28, 2019, 11:30:10 AM

Attachments (13)

Download all attachments as: .zip