[https://tibisay.cenditel.gob.ve/murachi/wiki Inicio] > [https://tibisay.cenditel.gob.ve/murachi/wiki/actividades_2019 Actividades en el 2019] > [https://tibisay.cenditel.gob.ve/murachi/wiki/estud_leng_java Estudiando lenguaje Java] > [https://tibisay.cenditel.gob.ve/murachi/wiki/ins_tomcat8_produccion Instalación de Murachí - Entorno de Producción Debian 9] [[br]] = Instalación y configuración de Murachí con Apache Tomcat 8 (SSL) en Entorno de Producción = [[BR]] == 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. [[BR]] == 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 4. 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 }}} 5. Finalmente se levanta el navegador de su preferencia y coloca la ruta '''''http://localhost:8080''''' (ver figura 1) [[Image( Interfaz de apache tomcat8.png, 800px, align=center, nolink)]] {{{ #!html

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) 6. 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''' 7. 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: {{{ }}} 8. Guardar los cambios y reiniciar el servicio tomcat. {{{ # systemctl restart tomcat8 }}} 9. Finalmente se prueba los roles creados en la pagina ''http//localhost:8080'' haciendo clic en el botón ''Manager WebApp'. Se introduce el usuario y contraseña asignada en el archivo '''tomcat-user.xml''' [[Image(Autenticacion de tomcat.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} [[BR]] [[Image(interfaz manager webapp.png, 800px, align=center, nolink)]] {{{ #!html

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 [https://tibisay.cenditel.gob.ve/murachi/downloads Murachi.war] [[BR]] == 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: [[BR]]1.1. Descargar el archivo Murachi.war al ''HOME''. [[BR]] 1.2. Luego se mueve el archivo al directorio ''/var/lib/tomcat8/webapps/'' {{{ # mv Murachi.war /var/lib/tomcat8/webapps/ }}} 2. Usando la interfaz gráfica del servidor Tomcat: [[BR]] 2.1. Ir a la sección '''Manager WebApp'''. [[BR]] 2.2. Bajar hasta la sección '''Archivo WAR a desplegar''' o '''WAR file to deploy''' (ver figura 4). [[BR]] 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). [[BR]] 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). [[Image(Seccion archivo WAR a desplegar.png, 800px, align=center, nolink)]] {{{ #!html

Figura 4. Sección Archivo WAR a desplegar

}}} [[BR]] [[Image(Cargando app Murachi.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} [[BR]] [[Image(Listando app Murachi.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} 3. 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/ [[BR]] === 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: {{{ Figura 7. Aceptar el certificado auto-firmado }}} * Añadir agregar excepción de seguridad: [[Image(agregar excepcion.png, 800px, align=center, nolink)]] {{{ #!html

Figura 8. Confirmar excepción de seguridad

}}} * Finalmente se puede observar la interfaz de configuración de Tomcat: [[Image(localhost 8443.png, 800px, align=center, nolink)]] {{{ #!html

Figura 9. Interfaz de Tomcat con SSL

}}} 7. 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 . . . }}} * Reiniciar el servicio {{{ systemctl restart tomcat8 }}} * Acceder a https://localhost:443/ o https://localhost/ * 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 murachi.prueba.cenditel.gob.ve }}} * Reiniciar el servicio y acceder a https://murachi.prueba.cenditel.gob.ve {{{ systemctl restart tomcat8 }}} [[Image(dominio murachi.png, 800px, align=center, nolink)]] {{{ #!html

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 }}} {{{ 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 }}} {{{ Protected Context /* CONFIDENTIAL }}} [[BR]] == 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''' -> [https://tibisay.cenditel.gob.ve/murachi/raw-attachment/wiki/ins_tomcat_servidor_ssl/VersionApiMurachi.war Descargar]. 2. 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'' 3. 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", }}} 4. Reiniciar el servicio Tomcat 5. 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) [[Image(VersionApiMurachi.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} 6. Para consultar la versión del servicio Murachí hacer clic al boton ''Enviar''. Ver figura 12 [[Image(VersionApiMurachi2.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} [[BR]] == 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''' -> [https://tibisay.cenditel.gob.ve/murachi/raw-attachment/wiki/ins_tomcat_servidor_ssl/pruebaservicioweb.war Descargar]. 2. 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'' 3. 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", }}} 4. Guardar los cambios y reiniciar el tomcat. 5. 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) [[Image(portal servicio murachi.png, 800px, align=center, nolink)]] {{{ #!html

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

}}} 6. 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 [https://murachi.cenditel.gob.ve/configuracionInstalacion/contenido_1_instalar_el_complemento_de_firma_esteidfirefoxplugin.html Configuración instalación del complemento]. 7. Finalmente el portal esta listo para consumir los servicio de Murachí desde su servidor de prueba.