Instalación y Administración de Apache Tomcat 6 Iván Párraga García – [email protected] Instalación y Administración de Apache Tomcat Módulo 1 Introducción Nº 2 Objetivos Instalación y Administración de Apache Tomcat Introducción al proyecto Apache & Jakarta Entender la tecnología J2EE Nº 3 Instalación y Administración de Apache Tomcat El proyecto Apache Rob McCool en el NCSA de la Universidad de Illinois, creó uno de los primeros servidores web (conocido como NCSA) El autor dejó el NCSA y un grupo de desarrolladores lanzaron una nueva versión corregida conocida como Apache Server (A PAtCHy Web Server) Apache fue ganando popularidad al mismo ritmo que NCSA la perdía (dejó de soportarse en 1999) Hoy día está disponible en cualquier plataforma y se considera un plataforma de producción de alta calidad y que tiene una cuota de mercado del 60% Nº 4 Instalación y Administración de Apache Tomcat Organización sin ánimo de lucro fundada en 1999 cuyo objetivo es facilitar el desarrollo de proyecto s de software libre Tomcat se ha desarrollado en el marco de la ASF Proyectos de la ASF: Servidor Web Apache Xerces: parser XML Java/C++ Ant: el sistema de construcción estándar de facto en Java Jakarta Nº 5 Instalación y Administración de Apache Tomcat Jakarta y Tomcat Tomcat era un subproyecto bajo el proyecto Apache Jakarta Apache Jakarta aglutina diversos proyectos Java JMeter Log4j Struts Hoy día Tomcat es un proyecto de alto nivel Nº 6 La licencia Apache Instalación y Administración de Apache Tomcat Tomcat es código libre, gratis y que puede distribuirse libremente. Se rige bajo la licencia de Apache cuyos puntos: La Apache License debe incluirse con cualquier redistribución Cualquier documentación incluida con la redistribución debe ser validad por la ASF Los términos “Tomcat”, “Projecto Jakarta”, “Apache” o “ASF” no pueden utilizarse sin permiso de la ASF Tomcat no aporta garantías de ningún tipo Tomcat puede ser utilizado por cualquier tipo de entidad Si se modifica el código, no es obligatorio entregar el código fuente de las modificaciones con la redistribución Las modificaciones no tienen que ser donadas a la ASF Nº 7 Instalación y Administración de Apache Tomcat Las diferentes tecnologías Java Java para dispositivos móviles Java para aplicaciones de escritorio JME JSE JEE Nº 8 Java Enterprise Edition (JEE) Es un conjunto de especificaciones que definen unas APIs para la creación de aplicaciones empresariales Instalación y Administración de Apache Tomcat Se construye encima de la JSE NO ES UN SOFTWARE. Las especificaciones son implementadas por diferentes proveedores (el propio SUN, IBM, Oracle, etc.) SUN controla estas (y otras) especificaciones a través del Java Community Process, que es un proceso formalizado el cual permite a las partes interesadas involucrarse en la definición de futuras versiones de características de la plataforma Java Nº 9 Arquitectura multicapa (I) Sistemas especializados por tareas en los servidores Instalación y Administración de Apache Tomcat Los usuarios acceden mediante un navegador web estándar Presentación Persistencia Nº 10 Lógica de Negocio Arquitectura multicapa (II) Ventajas Instalación y Administración de Apache Tomcat Mantenible Sistemas separados por responsabilidades Fácil añadir / modificar funcionalidades Escalable: los diferentes subsistemas pueden dimensionarse independientemente Mayor reusabilidad Fácil gestión de las máquinas clientes de los usuarios Nº 11 Instalación y Administración de Apache Tomcat Arquitectura multicapa de la JEE Cliente / Usuario HTTP Presentación Lógica de Negocio Contenedor Web RMI Contenedor EJB Límites de la tecnología Java Nº 12 Persistencia SQL SGBD Los contenedores JEE (I) Instalación y Administración de Apache Tomcat Un contenedor es un componente software que implementa parte de las especificaciones JEE Proporciona servicios al programador que son comunes y habituales a todas las aplicaciones liberándole de tener que codificarlos cada vez y permitiéndole centrarse en la lógica de negocio olvidándose de tareas tediosas y repetitivas Nº 13 Los contenedores JEE (II) Las especificaciones definen dos contenedores Instalación y Administración de Apache Tomcat Contenedor web: especializado en gestionar la capa de presentación con tecnologías web (JSPs, servlets, etc.) Contenedor de Enterprise Java Beans (EJBs): especializado en gestionar la capa de lógica de negocio e interactuar con el sistema de persistencia (el SGBD) Nº 14 Ventajas del uso de contendores Construyendo desde cero Tareas del desarrollador Lógica de Negocio Persistencia Gestión de transacciones Instalación y Administración de Apache Tomcat Multi-threading Seguridad Red Publicación de servicios Utilizando contenedores Tareas del desarrollador Lógica de Negocio Proporcionado por el contenedor Persistencia Gestión de transacciones Multi-threading Seguridad Red Publicación de servicios Nº 15 Servidores de aplicaciones (I) Instalación y Administración de Apache Tomcat Es un software que implementa las especificaciones y contenedores JEE Sun proporciona el sello “JEE compliant server” sólo si superan unos estrictos juegos de pruebas que garantizan que se satisface la especificación Diferentes proveedores ofrecen diferentes productos, pero está garantizada la compatibilidad entre todos ellos, así pues una aplicación desarrollada en JEE podrá desplegarse en cualquier servidor de aplicaciones Nº 16 Instalación y Administración de Apache Tomcat Servidores de aplicaciones (II) Nº 17 ¿Y Tomcat? Instalación y Administración de Apache Tomcat Tomcat es un producto muy popular, pero no es un servidor de aplicaciones porque sólo (entre otras cosas) implementa el contenedor web Es adecuado para aplicaciones web con arquitectura de dos capas, donde el propio contenedor web incluye la lógica de negocio sin requerir el contenedor de EJB Tomcat es más fácil de administrar y requiere menos recursos para funcionar que servidores de aplicaciones completos Nº 18 Instalación y Administración de Apache Tomcat ¿Qué hemos visto? El servidor web Apache está en el origen de la ASF La ASF es una organización que promociona el desarrollo de software libre Tomcat es un proyecto auspiciado por la ASF La tecnología Java J2EE se basa en la arquitectura en tres capas La capa de presentación web se implementa con un contenedor web Tomcat es un servidor y un contenedor web y es adecuado para algunas tipologías de aplicaciones por su facilidad de uso y su ligereza en cuanto a recursos Nº 19 Instalación y Administración de Apache Tomcat Módulo 2 Instalación de Tomcat Nº 20 Objetivos Instalar la Java Virtual Machine (JVM) Instalación y Administración de Apache Tomcat Instalar Tomcat Comprender la estructura de directorios de Tomcat Resolver problemas típicos Instalar Ant Nº 21 Instalación y Administración de Apache Tomcat Instalar la JVM Tomcat es una aplicación Java y por tanto requiere la JVM Tomcat 6 requiere la versión Java SE 5.0 o superior Desde la versión 6 de Tomcat no se necesita el JDK (es suficiente con el JRE) Nº 22 Instalación de la JVM en Windows (I) Instalación y Administración de Apache Tomcat Descargarla de http://java.sun.com Establecer la variable de entorno JAVA_HOME en la ruta a la raíz de la JRE Añadir a la variable de entorno PATH la ruta a la subcarpeta bin de la JRE Nº 23 Instalación y Administración de Apache Tomcat Instalación de la JVM en Windows (II) Nº 24 Descargar Tomcat Instalación y Administración de Apache Tomcat Conectarse a http://tomcat.apache.org Ir a la zona de descargas y elegir la versión correspondiente: Core: versión base disponible en diferentes formatos (nos descargaremos el instalador) Deployer: herramientas de despliegue Admin Webapp (no disponible todavía para la versión 6) Embedded: para embeber el servidor en otras aplicaciones Nº 25 Instalar mediante el asistente Instalar servicio de Windows Instalar librerías nativas APR Instalación y Administración de Apache Tomcat Puerto en el que aceptará peticiones Instalar ejemplos de servlets y JSPs Usuario y password de las herramientas administrativas Nº 26 Establecer las variables de entorno Instalación y Administración de Apache Tomcat Añadir la variable de entorno CATALINA_HOME que apunte a la raíz de la instalación Nº 27 Probar la instalación Iniciar el servidor manualmente <TOMCAT_HOME>\bin\tomcat6.exe Instalación y Administración de Apache Tomcat Iniciar el servidor como un servicio Nº 28 Instalación y Administración de Apache Tomcat Comprobar la instalación Nº 29 Instalación y Administración de Apache Tomcat La jerarquía de directorios de Tomcat bin: scripts y ficheros de arranque conf: ficheros de configuración del servidor y de usuarios entre otras cosas logs: contiene los ficheros de log lib: incluye todos los jars que el servidor requiera webapps: contiene todas las aplicaciones web work: archivos temporales requeridos por Tomcat Nº 30 Instalación y Administración de Apache Tomcat Problemas típicos (I) Problema: error de versión de clase Descripción: aparece la siguiente excepción: java.lang.UnsupportedClassVersionError Solución: instalar una JRE 1.5 o superior y asegurar que JAVA_HOME le apunta Problema: puerto en uso Descripción: aparece la excepción: java.net.BindException: Address already in use Solución: asegurarse que no hay otro servicio en ese puerto (otro servidor web por ejemplo). Se puede monitorizar el puerto mediante el comando netstat -ao Nº 31 Instalación y Administración de Apache Tomcat Problemas típicos (II) Problema: ejecutar varias instancias Solución: asegurarse que al intentar arrancar Tomcat no hay otra en ejecución (comprobar que no esté activo el servicio de Tomcat) Problema: un proxy bloquea el acceso Descripción: se tiene un proxy establecido para todos los servicios HTTP Solución: deshabilitar el proxy para las conexiones locales. En la configuración del proxy del navegador web permitir la IP 127.0.0.1 Nº 32 Instalación y Administración de Apache Tomcat ¿ Por qué Ant? Ant es una herramienta de construcción de software que permite automatizar tareas repetitivas en el proceso de compilación, enlazado, despliegue, etc Se ha convertido en la herramienta de este tipo estándar de facto para este tipo de tareas Tomcat define una serie de librerías que le permiten automatizar tareas como el despligue y repligue de apliaciones web Nº 33 Instalación y Administración de Apache Tomcat Instalar Ant y las bibliotecas de Tomcat Descargar Ant desde http://ant.apache.org Descomprimir el fichero Configurar las variables de entorno ANT_HOME para que apunte a la raíz de la distribución Configurar la variable PATH para añadir la ruta hasta el directorio <ANT_HOME>/bin Copiar el fichero <TOMCAT_HOME>/lib/catalinaant.jar en <ANT_HOME>/lib Nº 34 Instalación y Administración de Apache Tomcat ¿Qué hemos visto? Tomcat es una aplicación Java que requiere la JRE versión 1.5 o superior Hay diferentes versiones de Tomcat. En general trabajaremos con la versión Core La instalación bajo Windows se hace de forma sencilla bajo un asistente y la configuración de la variable de entorno CATALINA_HOME Se han listado los errores y soluciones típicos en la instalación de Tomcat Tomcat permite automatizar tareas mediante Ant y por eso lo instalamos Nº 35 Instalación y Administración de Apache Tomcat Módulo 3 Aplicaciones web con Java Nº 36 Objetivos Instalación y Administración de Apache Tomcat Entender la tecnología de servlets Entender las JSP El framework Jakarta Struts Nº 37 Web sites y aplicaciones web Instalación y Administración de Apache Tomcat Un web site es una colecciones de recursos estáticos como páginas HTML, imágenes Una aplicación web es un web site con recursos dinámicos Una aplicación web ejecuta programas en el lado del servidor y para ello tiene diferentes tecnologías disponibles Nº 38 Ejecución de CGI’s Instalación y Administración de Apache Tomcat Servidor Petición Shell CGI Petición Shell CGI Petición Shell CGI Servidor web Nº 39 Programa CGI Ejecución de servlets Servidor Instalación y Administración de Apache Tomcat Petición Thread Petición Thread Petición Thread Servidor web Nº 40 Servlet Contenedor web Ventajas de modelo de servlets Instalación y Administración de Apache Tomcat Utilizan threads en vez de procesos que requieren menos recursos de CPU y memoria (es escalable) Las tecnologías Java permiten separar la capa de lógica de negocio de la de presentación Java es un lenguaje robusto y OO Java es independiente de la plataforma Nº 41 Fundamentos de los Servlets Instalación y Administración de Apache Tomcat Es un tecnología de componentes que se ejecuta en el lado del servidor Se encarga de lo siguiente: Procesa peticiones HTTP Genera respuestas HTTP dinámicas Un contenedor web es una Máquina Virtual Java (JVM) que gestiona los servlets y un pool de threads Nº 42 Instalación y Administración de Apache Tomcat Fundamentos de las JavaServer Pages Las JSP se traducen en clases de tipo servlet que se compilan y ejecutan por el contenedor web El objetivo principal de las JSP es centrarse en la lógica de presentación y no en la lógica de diseño Se puede embeber código Java dentro de una JSP Usando la tecnología Java, las JSP se suelen usar en conjunción con los servlets para implementar el patrón M-V-C Nº 43 Ventajas de la tecnología JSP Instalación y Administración de Apache Tomcat Proporcionan alto rendimiento y escalabilidad porque usan threads para responder a las peticiones Son tecnología Java y por tanto independiente de la plataforma Pueden utilizar todas las características de la orientación a objetos y las API Java Nº 44 Inconvenientes de la tecnología JSP Instalación y Administración de Apache Tomcat Usadas de manera aislada, incluyendo la lógica de negocio, pueden ser crípticas y además son más difíciles de debuggar Hay que tener en cuenta temas de concurrencia (hay que comprender el proceso mediante el que se convierten en servlets para evitar problemas potenciales) Nº 45 Instalación y Administración de Apache Tomcat El patrón MVC (modelo-vista-controlador) Nº 46 Struts Instalación y Administración de Apache Tomcat Implementa un patrón de diseño de contrastada utilidad en la gestión de interfaces MVC (modelo-vista-controlador) El framework proporciona Un componente que actúa de controlador Clases de conveniencia Archivos de configuración Nº 47 ¿Por qué vale la pena usar Struts? Instalación y Administración de Apache Tomcat Proporciona una infraestructura flexible y extensible para implementar MVC Permite al desarrollador centrarse en lo que aporta valor añadido a la aplicación: Controladores Componentes que constituyen el modelo Vistas Facilita Definir el flujo de navegación Verificar y procesar la entrada de datos del usuario La gestión de errores Nº 48 Estructura de una aplicación web (I) Instalación y Administración de Apache Tomcat La estructura de una aplicación web (jerarquía de directorios y ficheros) está definida en la API Cualquier contenedor web es capaz de trabajar con dicha estructura Los diferentes contenedores suelen tener un directorio de despliegue donde se instalan las aplicaciones web Ejercicio M3E1 Nº 49 Estructura de una aplicación web (II) Recursos estáticos y JSPs Descriptor de contexto (context.xml) Instalación y Administración de Apache Tomcat Descriptor de despliegue (web.xml) Servlets y clases compiladas Nº 50 jars necesarios por la aplicación web Instalación y Administración de Apache Tomcat ¿Qué hemos visto? Los servlets son una tecnología más eficiente que otras soluciones para dar dinamismo a las aplicaciones web Los JSP se centran en la presentación La tecnología Java hace uso del patrón M-V-C y de la arquitectura en 3 capas Struts implementa M-V-C Las aplicaciones web tienen un estructura definida por la API que cualquier contenedor web entiende Nº 51 Instalación y Administración de Apache Tomcat Módulo 4 Configurar Tomcat Nº 52 Objetivos Instalación y Administración de Apache Tomcat Entender la arquitectura de Tomcat Entender la configuración básica de Tomcat Entender los principales ficheros de configuración Gestionar el control de acceso Nº 53 Arquitectura de Tomcat (I) Instalación y Administración de Apache Tomcat Tomcat se constituye como una jerarquía anidada de componentes Un mismo tipo de componente puede aparecer en diversos puntos de la jerarquía Es importante entender esta jerarquía a la hora de configurar y administrar el servidor En la siguiente transparencia se muestra una configuración típica Nº 54 Arquitectura de Tomcat (II) Servidor Servicio Instalación y Administración de Apache Tomcat Conector Motor Host Logger Válvula Realm Logger Válvula Realm Contexto Válvula Realm Nº 55 Encapsulador Componentes de Tomcat (I) Instalación y Administración de Apache Tomcat Servidor: el contenedor de más alto nivel ofrece un puerto que permite para el servidor. Sólo uno por JVM Servicio: contenedor de alto nivel que engloba un motor y un conjunto de conectores Motor: componente que procesa peticiones, examinándolas para redirigirlas al host o context correspondiente. Motor por defecto: Catalina Nº 56 Componentes de Tomcat (II) Instalación y Administración de Apache Tomcat Realm: gestiona la autenticación y autorización de usuario Válvula: son filtros transparentes a las aplicaciones que permiten interceptar las peticiones y preprocesarlas Conector: ofrecen los puertos por los cuales los clientes se conectan a las aplicaciones Nº 57 Instalación y Administración de Apache Tomcat Componentes de Tomcat (III) Logger: informan sobre el estado interno de un componente y permiten registrar esa información Host: nos permite tener variaso servidores virtuales en la misma máquina y diferenciarlos por dirección IP o por nombre Contexto: representa la aplicación web (son términos sinónimos) y se considera a la vez un contenedor de componentes servlet y JSP (entre otros) Nº 58 Configuración por arquitectura Instalación y Administración de Apache Tomcat Comprendiendo las relaciones padre-hijo de los componentes, la administración de Tomcat es sencilla El fichero de configuración más importante es <TOMCAT_HOME>/conf/server.xml que representa dichas relaciones mediante anidamiento de etiquetas XML Los scripts de arranque leen este fichero para crear y configurar los componentes Nº 59 El server.xml por defecto Instalación y Administración de Apache Tomcat <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server> Nº 60 Ficheros de configuración básicos (I) Instalación y Administración de Apache Tomcat Residen en <TOMCAT_HOME>/conf server.xml: fichero de configuración principal, que se lee al arrancar el servidor. Afecta a la instancia completa de Tomcat. No debería contener configuración de contexto (aplicación) tomcat-users.xml: contiene autenticación de usuario e información de roles. Las aplicaciones de gestión utilizan esta información Nº 61 Instalación y Administración de Apache Tomcat Ficheros de configuración básicos (II) context.xml: configuración de contexto por defecto de las aplicaciones web (configura componentes como gestores de persistencia de sesión, realms, conexiones JDBC, etc) web.xml: constituye el descriptor de despliegue por defecto de las aplicaciones web catalina.policy: fichero de configuración del modelo de seguridad de Java SE Nº 62 Ficheros de configuración básicos (III) Instalación y Administración de Apache Tomcat catalina.properties: propiedades que aportan accesos a paquetes internos y control de contenidos sobre los cargadores de clases logging.properties: Tomcat utiliza por defecto la API de Java SE para escribir los ficheros de log (no log4J) y este es el archivo de configuración Nº 63 Instalación y Administración de Apache Tomcat server.xml: Componente Server Ejercicio M4E1 Nº 64 Instalación y Administración de Apache Tomcat server.xml: Subelementos de Server Nº 65 Instalación y Administración de Apache Tomcat server.xml: Componente Service Nº 66 Los modos de operaciones de Tomcat Instalación y Administración de Apache Tomcat Servidor de aplicaciones Tomcat requiere un servidor web que actúe de frontend (Apache, IIS u otro) El contenido estático es servido por el frontend Las peticiones a servlets y JSPs son redirigidas a Tomcat por el servidor web Recibe peticiones en protocolos específicos como AJP que son enviados por el frontend Standalone No hay un servidor web que actúe de frontend Todos los contenidos son servidos por Tomcat Recibe peticiones HTTP Nº 67 server.xml: Connector Instalación y Administración de Apache Tomcat Veremos los conectores y los posibles modos de operación de Tomcat en más detalle en capítulos subsiguientes Nº 68 Instalación y Administración de Apache Tomcat server.xml: Componente Engine Nº 69 Componente Realm Instalación y Administración de Apache Tomcat Implementan la seguridad declarativa Establecen un mapeo entre usuarios, contraseñas y roles de teareas que pueden llevar a cabo Lo veremos en más detalles en un módulo posterior Nº 70 Instalación y Administración de Apache Tomcat Componente Host Es un contenedor que representa un host virtual Un solo servidor Tomcat 6 puede contener muchos hosts virtuales Servidor Motor Host Virtual 1 Host Virtual 2 Host Virtual 2 (www.host1.com) (www.host2.org) (host1.es) Web App 1 Nº 71 Servicio Web App 2 Web App 1 Web App 2 Web App 1 Web App 2 Instalación y Administración de Apache Tomcat server.xml: Componente Host Ejercicio M4E2 Nº 72 context.xml Instalación y Administración de Apache Tomcat Ya hemos visto que los contextos establecen una serie de configuraciones para cada aplicación web (los veremos en más detalle) Se alojan en <CATALINA_HOME>/conf/<nombre_motor>/<nombre_host> Las aplicaciones web pueden definir su propio context.xml en su carpeta META-INF Si no se define ningún context.xml se aplica por defecto <CATALINA_HOME>/conf/context.xml Nº 73 Descriptor de despliegue: web.xml Instalación y Administración de Apache Tomcat Toda aplicación web, por especificación, está obligada a aportar un descriptor de despliegue en WEBINF/web.xml El descriptor <TOMCAT_HOME>/conf/web.xml es un descriptor por defecto que se procesa siempre antes que el descriptor propio de cada aplicación web Sólo debería contener información general y no específica de aplicación Permite activar/desactivar/configurar numerosas opciones como el compilador de JSPs, CGI, SSI, mapeos MIME… Ejercicio M4E3 Nº 74 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat La arquitectura de Tomcat se basa en componentes organizados jerárquicamente en relaciones padre-hijo El fichero de configuración principal es server.xml que mapea esta jerarquía Hay otros ficheros de configuración que aplican valores por defecto sobre las aplicaciones desplegadas Nº 75 Instalación y Administración de Apache Tomcat Módulo 5 Gestionar aplicaciones web Nº 76 Objetivos Instalación y Administración de Apache Tomcat Gestión mediante el Tomcat Manager Integración de gestión mediante Ant Gestión mediante peticiones HTTP Nº 77 Desplegar una aplicación manualmente Instalación y Administración de Apache Tomcat Añadir una entrada <Context> en el server.xml, lo que permite colocar la aplicación web en una localización diferente a <CATALINA_HOME>/webapps Copiar el directorio de aplicación completo en el directorio <CATALINA_HOME>/webapps Copiar el fichero WAR en <CATALINA_HOME>/webapps Nº 78 Tomcat Manager Instalación y Administración de Apache Tomcat Herramienta web que permite llevar a cabo tareas de administración: Desplegar aplicación web Listar aplicaciones desplegadas y sesiones activas Listar recursos JNDI Elaborar roles de seguridad Iniciar una aplicación detenida Detener una aplicación Replegar una aplicación Mostrar estadísticas de sesión Nº 79 Instalación y Administración de Apache Tomcat Permitir el acceso al manager Por defecto y por motivos de seguridad está desactivado Hay que configurar un Realm que permita el acceso Por defecto se controla mediante un Realm que lee los contenidos del fichero <CATALINA_HOME>/conf/tomcat-users-xml Hay que activar un usuario con su password correspodiente y el rol manager Ejercicio M5E1 Nº 80 Instalación y Administración de Apache Tomcat La pantalla principal del manager Nº 81 Ajustar la configuración del Manager Instalación y Administración de Apache Tomcat Se trata de una aplicación web como cualquier otra y por tanto tiene un descriptor de despliegue propio En su web.xml se pueden modificar los criterios de seguridad Operaciones permitidas y roles administrativos Tipo de autenticación (veremos los diferentes tipos en un módulo posterior) Nº 82 Instalación y Administración de Apache Tomcat Manager: mostrar el estado del servidor Nº 83 Instalación y Administración de Apache Tomcat Manager: gestionar aplicaciones (I) Nº 84 Instalación y Administración de Apache Tomcat Manager: gestionar aplicaciones (II) Trayectoria: ruta de la aplicación web Nombre a mostrar: el <display-name> del DD Ejecutándose: true o false según sea Sesiones: número de sesiones activas. Haciendo click sobre el número se obtiene más información estadística Comandos: arrancar, parar, recargar, replegar Nº 85 Instalación y Administración de Apache Tomcat Manager: desplegar aplicaciones Ejercicio M5E2 Nº 86 Controlar aplicaciones mediante Ant Instalación y Administración de Apache Tomcat Instalar Ant y las librerías de Tomcat (ver módulo 2) Añadir al script build.xml los elementos <taskdef> para llamar a los comandos Añadir, si no existiera, un usuario con el rol manager Nº 87 Importar los tasks mediante taskdef Instalación y Administración de Apache Tomcat Los tasks de Tomcat no son estándar de Ant y por tanto hay que importarlos en el fichero build.xml que los utilice build.xml <project name="M3E1" default="default" basedir="."> ../.. <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/> ../.. </project> Nº 88 Importar los tasks mediante un properties Instalación y Administración de Apache Tomcat tomcat-tasks.properties deploy=org.apache.catalina.ant.DeployTask list=org.apache.catalina.ant.ListTask status=org.apache.catalina.ant.JKStatusUpdateTask reload=org.apache.catalina.ant.ReloadTask remove=org.apache.catalina.ant.RemoveTask resources=org.apache.catalina.ant.ResourcesTask start=org.apache.catalina.ant.StartTask stop=org.apache.catalina.ant.StopTask undeploy=org.apache.catalina.ant.UndeployTask ../.. build.xml ../.. <path id=“tomcat.classpath”> <fileset dir=“${tomcat.home}/lib”> <include name=“*.jar”/> </fileset> </path> <taskdef file=“tomcat-tasks.properties” classpathref=“tomcat.classpath”/> ../.. Nº 89 Importar los tasks desde el script predefinido Instalación y Administración de Apache Tomcat Desde la versión de Tomcat 5.5 existe un script que hace todo lo necesario build.xml <project name="M3E1" default="default" basedir="."> ../.. <import file=“${tomcat.home}”/bin/catalina-tasks.xml”/> ../.. </project> Nº 90 Instalación y Administración de Apache Tomcat Usar los tasks (I) Una vez hemos importado los tasks ya los podemos utilizar en nuestros targets para llevar a cabo las diferentes tareas administrativas Para ver el detalle de uso de cada task, consultar la documentación on-line para el paquete org.apache.catalina.ant Nº 91 Usar los tasks (II) Instalación y Administración de Apache Tomcat <target name="deploy"> <deploy url="${tomcat.manager.url}" username="${tomcat.username}" password="${tomcat.password}" path="${context.path}" war="${war.file}" update="true"/> </target> <target name="reload"> <reload url="${tomcat.manager.url}" username="${tomcat.username}" password="${tomcat.password}" path="${context.path}"/> </target> <target name="start"> <start url="${tomcat.manager.url}" username="${tomcat.username}" password="${tomcat.password}" path="${context.path}"/> </target> <target name="stop"> <stop url="${tomcat.manager.url}" username="${tomcat.username}" password="${tomcat.password}" path="${context.path}"/> </target> Ejercicio M5E3 Nº 92 Gestión mediante peticiones HTTP (I) Instalación y Administración de Apache Tomcat Los comandos se lanzan con peticiones HTTP desde un navegador El formato general de la petición es: http// {nombre_host}:{puerto}/manager/{comando}?{params} comando: list, sessions, start, stop, install, remove, deploy, undeploy, reload, serverinfo, roles, resources, status, jxmget, jxmset y jxmproxy params: depende del tipo de comando Las respuestas son en texto plano (no HTML) Nº 93 Gestión mediante peticiones HTTP (II) Instalación y Administración de Apache Tomcat Un navegador web sólo puede enviar peticiones GET Algunas operaciones requieren peticiones POST o PUT y por tanto requerirán de un cliente más sofisticado que un navegador Para ver un listado de las diferentes operaciones y sus parámetros ver el capítulo 8 del libro Nº 94 Instalación y Administración de Apache Tomcat Petición HTTP: listar aplicaciones desplegadas Nº 95 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat Hay diferentes manera de gestionar las aplicaciones web Mediante el Tomcat Manager que es una aplicación web que requiere activación previa Mediante tareas Ant que permite automatizar los procesos Mediante peticiones HTTP Nº 96 Instalación y Administración de Apache Tomcat Módulo 6 Características avanzadas Nº 97 Objetivos Instalación y Administración de Apache Tomcat Entender las sesiones persistentes Configurar recursos JNDI Configurar una sesión JavaMail Nº 98 ¿Por qué sesiones persistentes? Instalación y Administración de Apache Tomcat Por defecto, las sesiones de Tomcat están configuradas para sobrevivir a reinicios del servidor, pero si queremos más control deberemos configurarlo Sesiones inactivas (pero no caducadas) se pueden configurar para que se copien a disco liberando los recursos de memoria asociados Al parar Tomcat todas las sesiones se vuelcan a disco por lo que al arrancarlo de nuevo se podrán restaurar Las sesiones que tengan un tiempo de vida que supere cierto límite se copian a disco automáticamente evitando posibles death-locks Nº 99 Configurar las sesiones persistentes Instalación y Administración de Apache Tomcat Se gestiona mediante el elemento <Manager> como un subelemento de <Context> Podemos definirlo de manera global si lo situamos en el <TOMCAT_HOME>/conf/context.xml Podemos definirlo de manera local a una aplicación web si lo ponemos en su fichero META-INF/context.xml Nº 100 Instalación y Administración de Apache Tomcat El elemento Manager Nº 101 Ejemplo de configuración Instalación y Administración de Apache Tomcat <Context> <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" maxActiveSession="3" minIdleSwap="0" maxIdleSwap="60" maxIdleBackup="0"> <Store className="org.apache.catalina.session.FileStore"/> </Manager> </Context> Ejercicio M6E1 Nº 102 Instalación y Administración de Apache Tomcat ¿Qué es JNDI? JNDI = Java Naming and Directory Interface Es una API Java que da una abstracción para acceder de igual forma a diferentes servicios de directorio (LDAP, MS ADS, otros) Aplicación Java Aplicación Java Aplicación Java Aplicación Java JNDI Driver LDAP Nº 103 Driver ADS Otros drivers Instalación y Administración de Apache Tomcat ¿Qué recursos se ofrece JNDI? Autenticación (nombre de usuario y contraseña) Políticas de control de acceso Directorios de la organización Servidores Impresoras Otros objetos o recursos Nº 104 Instalación y Administración de Apache Tomcat Tomcat y JNDI (I) Los recursos se preconfiguran global o localmente (server.xml o context.xml) en el servidor Las aplicaciones web acceden a estos recursos preconfigurados Nº 105 Tomcat y JNDI (II) Búsqueda JNDI Aplicación Web Instalación y Administración de Apache Tomcat Recurso devuelto Recurso JNDI preconfigurado en server.xml Leer y emular funcionalidad JNDI Servidor Tomcat Aplicación Web Aplicación Web Nº 106 Ámbito de config. de recursos JNDI Instalación y Administración de Apache Tomcat A nivel global de servidor, disponible para todos los servicios y motores. En el elemento <GlobalNamingResources> del server.xml A nivel de host virtual. En el elemento <DefaultContext> del server.xml A nivel de <Context>, asociado a una aplicación web (seguramente en el META-INF/ context.xml) Nº 107 Subelementos JNDI soportados Instalación y Administración de Apache Tomcat Son elementos hijos de <Context> o <DefaultContext> Nº 108 Instalación y Administración de Apache Tomcat Atributos del elemento Environment <Environment name=“monedaPorDefecto” type=“java.lang.String” value=“euro” /> Ejercicio M6E2 Nº 109 JavaMail y JNDI Instalación y Administración de Apache Tomcat JavaMail es una API utilizada para crear y enviar correo electrónico Tomcat soporta la configuración JNDI de una sesión JavaMail Nº 110 Instalar JavaMail Descargar mail.jar de Instalación y Administración de Apache Tomcat http://java.sun.com/products/javamail/downloads/index.html Descargar activation.jar de http://java.sun.com/products/javabeans/jaf/index.jsp Copiar los jars a <TOMCAT_HOME>/lib/ Nº 111 Configurar JNDI para JavaMail Instalación y Administración de Apache Tomcat Al igual que los elementos Environment, podemos definirlo en los diferentes ámbitos <Context> <Resource name="mail/Session" auth="Container“ type="javax.mail.Session" /> <ResourceParams name="mail/Session"> <parameter> <name>mail.smtp.host</name> <value>localhost</value> </parameter> <parameter> <name>mail.smtp.port</name> <value>25</value> </parameter> </ResourceParams> </Context> Ejercicio M6E3 Nº 112 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat Para gestionar sesiones persistentes tenemos el elemento Manager que se configura a nivel de contexto (global o local a una webapp JNDI es una API que nos permite acceder a diferentes servicios de directorio de manera independiente JNDI nos permite configurar en el servidor recursos (como JavaMail) que luego podrán ser accedidos desde las aplicaciones Nº 113 Instalación y Administración de Apache Tomcat Módulo 7 Conexión con bases de datos Nº 114 Objetivos Instalación y Administración de Apache Tomcat Entender JDBC Configurar una DataSource a través de JNDI Interactuar con MySQL Nº 115 ¿Qué es JDBC? Instalación y Administración de Apache Tomcat La mayoría de bases de datos comerciales de hoy día son bases de datos relacionales JDBC es una API Java que se abstrae del proveedor de bases de datos relacional haciendo transparentes las diferencias entre ambas JDBC proporciona una interfaz SQL y de conexión contra los diferentes SGBDs Nº 116 Diagrama básico de JDBC Aplicación Java Instalación y Administración de Apache Tomcat Llamadas JDBC Librería JDBC Independiente del SGBD Dependiente del SGBD Peticiones SQL nativas SGBD Driver JDBC Respuestas SQL nativas Nº 117 Misión de las operaciones JDBC Instalación y Administración de Apache Tomcat Recibir las llamadas de la API JDBC y transformarlas en una consulta SQL Enviar esa consulta al SGBD Recuperar el conjuntos de resultados y transformarlo en una estructura de datos Java Nº 118 Etapas en la programación JDBC Instalación y Administración de Apache Tomcat Obtener una conexión a un servidor de bases de datos remoto Generar y preparar una sentencia SQL Ejecutar la sentencia SQL Obtener el conjunto resultado y trabajar con él Desconectarse de la base de datos remota Nº 119 Pool de conexiones Instalación y Administración de Apache Tomcat Los procesos de conexión y desconexión de una base de datos son costosos en recursos y tiempo Un pool es un componente que almacena conexiones físicas pre-establecidas contra el SGBD y que las proporciona a los componentes que las requieran bajo demanda Cuando un componente ha terminado de utilizar una conexión al cerrarla, en realidad la está devolviendo al pool pero la conexión física permanece abierta y disponible para un nuevo “usuario” Nº 120 Instalación y Administración de Apache Tomcat Funcionamiento de un pool 1.- Solicita conexión Aplicación Web 2.- Recibir conexión lógica SGBD 3.- Cerrar conexión lógica Nº 121 4.- Conexión física devuelta al pool Emulación JNDI y los pool en Tomcat 6 Instalación y Administración de Apache Tomcat Tomcat ofrece Acceder a las fuentes de datos JDBC mediante una búsqueda JNDI Utilizar el pool propio de Tomcat (DBCP JakartaComons) Nº 122 Instalación y Administración de Apache Tomcat Configurar una conexión JNDI Añadir una etiqueta <Resource> en el elemento <Context> (META-INF/context.xml) o en el elemento <DefaultContext> (en server.xml) Confirmar que se ha definido un elemento <resource-ref> en el DD que se corresponderá con el elemento <Resource> del paso anterior Utilizar llamadas JNDI en el código de la aplicación para buscar la fuente de datos JDBC Nº 123 Instalación y Administración de Apache Tomcat La etiqueta Resource <Resource name="jdbc/oficina” auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="30" maxWait="10000" username="user" password="pass" url="jdbc:mysql://localhost:3306/oficina" driverClassName="com.mysql.jdbc.Driver" /> Ejercicio M7E1 Nº 124 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat Java ofrece la API JDBC para conectarnos de manera independiente a diferentes SGBDs Un pool es un componente que permite gestionar las conexiones obteniendo un mayor rendimiento Tomcat permite acceder a fuentes de datos mediante JNDI y tiene un pool integrado Nº 125 Instalación y Administración de Apache Tomcat Módulo 8 Conectores Nº 126 Objetivos Instalación y Administración de Apache Tomcat Entender los diferentes conectores HTTP Entender la configuración con un servidor web actuando de front-end Configurar Apache y Tomcat para que se comuniquen Nº 127 Los modos de operaciones de Tomcat Instalación y Administración de Apache Tomcat Servidor de aplicaciones Tomcat requiere un servidor web que actúe de frontend (Apache, IIS u otro) El contenido estático es servido por el frontend Las peticiones a servlets y JSPs son redirigidas a Tomcat por el servidor web Recibe peticiones en protocolos específicos como AJP que son enviados por el frontend Standalone No hay un servidor web que actúe de frontend Todos los contenidos son servidos por Tomcat Recibe peticiones HTTP Nº 128 ¿Qué son los conectores? Instalación y Administración de Apache Tomcat Son los componentes que proporcionan la interfaz externa al servidor Existen conectores para diferentes protocolos (HTTP, AJP…) El conector HTTP/1.1 basado en Coyote es el conector por defecto Nº 129 Conectores HTTP disponibles Instalación y Administración de Apache Tomcat Conector HTTP/1.1 basado en Java (Coyote) Conector HTTP de alta eficiencia NIO basado en Java Conector HTTP APR optimizado con código nativo Nº 130 Conector HTTP/1.1 Instalación y Administración de Apache Tomcat Como hemos visto, los conectores se definen en el <TOMCAT_HOME>/conf/server.xml El único atributo obligatorio es el port <Conector port=“8080” protocol=“HTTP/1.1” maxThreads=“150” connectionTimeout=“2000” redirectPort=“8443” /> Nº 131 Instalación y Administración de Apache Tomcat Atributos del conector HTTP/1.1 (I) Nº 132 Instalación y Administración de Apache Tomcat Atributos del conector HTTP/1.1 (II) Nº 133 Instalación y Administración de Apache Tomcat Conector HTTP/1.1 con SSL Utiliza los mismos atributos que el conector HTTP/1.1 (adicionalmente veremos otros más) Debería tener el atributo secure a true y el scheme a https <Conector port=“8443” protocol=“HTTP/1.1” maxThreads=“150” scheme=“https” secure=“true” clientAuth=“false” sslProtocol=“TLS” /> Nº 134 Instalación y Administración de Apache Tomcat Atributos HTTP/1.1 relacionados con SSL Nº 135 Instalación y Administración de Apache Tomcat El conector NIO Es un conector escrito en Java que utiliza las nuevas librerías NIO de Java 5 Proporcionar operaciones sin bloqueo Soporta Comet (técnica de programación similar a Ajax que permite enviar información al cliente sin que la haya solicitado) <Conector port=“8080” protocol=“org.apache.coyote.http11.Http11NioProtocol” maxThreads=“150” connectionTimeout=“20000” redirectPort=“8443” /> Nº 136 Instalación y Administración de Apache Tomcat ¿Qué es APR? APR (Apache Portable Runtime) es una librería de código nativo escrita en C/C++ dependiente de la plataforma Existen versiones para Windows, Linux y Unix No es estrictamente un conector, pero cuando se activa el conector estándar delega la mayoría de sus operaciones en él Al utilizar código nativo incrementa la eficiencia y escalabilidad Nº 137 Instalación y Administración de Apache Tomcat ¿Por qué es más eficiente y escalable? Utiliza una llamada sendFile() en modo núcleo para enviar grandes ficheros estáticos directamente desde el sistema de ficheros nativo Usa un solo consultor de persistencia de código nativo para implementar conexiones persistentes para un gran número de conexiones Utiliza código nativo de OpenSSL, el cual tiene capacidad de acelerar la implementación del controlador SSL (mediante hardware) Nº 138 Activar APR (I) Instalar las librerías nativas Instalación y Administración de Apache Tomcat Descargar la librería En los sistemas Unix / Linux suele estar incluida de serie Para Windows puede descargarse de: http://tomcat.heanet.ie/native Configurar la librería En Unix / Linux incluirla en LD_LIBRARY_PATH En Windows incluirla en el PATH Nº 139 Activar APR (II) Instalación y Administración de Apache Tomcat Modifica el conector para que use APR <Conector port=“8080” protocol=“org.apache.coyote.http11.Http11AprProtocol” maxThreads=“150” connectionTimeout=“20000” redirectPort=“8443” /> Ejercicio M8E1 Nº 140 Instalación y Administración de Apache Tomcat ¿Standalone o sevidor de front-end? La eficiencia del código nativo APR y las JVM modernas hace que la elección no sea trivial considerando sólo la eficiencia Una configuración clúster con balanceo de carga obliga a tener un front-end El soporte de seguridad de Apache e IIS es significativamente mejor que el de Tomcat Si la estrategia web incluye otros mecanismos dinámicos (PHP, Perl, Python, ASP…) requeriremos un servidor de front-end especializado Nº 141 Instalación y Administración de Apache Tomcat Configuración front-end con Apache Para implementar la comunicación se requieren módulos especializados en ambos extremos Estos módulos se comunican con el protocolo AJP En el lado de Apache son módulos escritos en C/C++ En el lado Tomcat son conectores AJP escritos en Java Nº 142 Arquitectura de la integración Instalación y Administración de Apache Tomcat Petición de recursos estáticos Protocolo HTTP Protocolo AJP Módulo Petición de recursos dinámicos: servlets,JSPs Nº 143 Tomcat Apache Conector AJP Características de AJP1.3 Instalación y Administración de Apache Tomcat Eficiencia optimizada en redes rápidas (como ethernet gigabit) Compresión para optimizar el ancho de banda Soporte para SSL, cifrado y certificados de cliente Soporte de clústeres Nº 144 Módulos disponibles para Apache (I) Instalación y Administración de Apache Tomcat Dos opciones mod_jk: el módulo “tradicional” mod_proxy: módulo estándar de Apache que en sus últimas versiones soporta AJP ¿Cuál es la mejor opción? mod_proxy El esfuerzo de desarrollo se ha centrado en este módulo Es estándar de Apache (lo tendremos disponibles sin tener que construirlo) Es más fácil (estándar) de configurar Nº 145 Módulos disponibles para Apache (II) Instalación y Administración de Apache Tomcat Versión de Apache 1.3.x 2.0.x 2.2.x mod_jk Sí Sí Sí mod_proxy No Sí (necesita código de la 2.2) Sí Nº 146 mod_jk: Concepto de worker Instalación y Administración de Apache Tomcat Representa una instancia de Tomcat en ejecución Cuando tenemos un cluster tenemos más de un worker Cada worker se identifica por un nombre de host (máquina donde está la instancia Tomcat) único o una combinación de dirección IP y número de puerto (puerto donde escucha el protocolo AJP) Nº 147 mod_jk: El fichero workers.properties (I) Es un fichero que se situa en Instalación y Administración de Apache Tomcat <APACHE_HOME>/conf Es leído por el módulo de Apache que se encargará de enviar las peticiones AJP contra las diferentes instancias de Tomcat Contiene Descripción de la lista de workers Descripción de cada instancia de worker de la lista anterior Nº 148 mod_jk:El fichero workers.properties (II) Instalación y Administración de Apache Tomcat workers.properties worker.list = testworker1, tesworker2 worker.testworker1.type = ajp13 worker.testworker1.host = 192.168.1.128 worker.testworker1.port = 9009 worker.testworker1.connection_pool_size = 5 worker.testworker1.connection_pool_timeout = 300 worker.testworker2.type = … … Nº 149 Instalación y Administración de Apache Tomcat mod_jk: Propiedades de los workers Nº 150 Instalación y Administración de Apache Tomcat mod_jk: Tipos de worker ajp13: representa una instancia en ejecución de Tomcat lb: se emplea para equilibrio de cargas. Este worker no procesa peticiones sino que las redirige a otros worker de tipo ajp13 en función de su carga status: se utiliza para mostrar información útil de carga jni: es un protocolo que permite enviar peticiones entre Apache y Tomcat a través de memoria porque comparten el mismo proceso Nº 151 mod_jk: Configuración de Apache Construir el módulo mod_jk y copiarlo en Instalación y Administración de Apache Tomcat <APACHE_HOME>/modules Añadir la directiva correspondiente en httpd.conf LoadModule jk_module modules/mod_jk.so Configurar el wokers.properties Nº 152 mod_proxy: Configuración de Apache Instalación y Administración de Apache Tomcat Añadir la directiva correspondiente en httpd.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so Editar la configuración de proxy en http.conf, p.e.: ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /examples/jsp ajp://localhost:8009/examples/jsp ProxyPassReverse /examples/jsp ajp://localhost:8009/examples/jsp <Location /examples/jsp> Order allow,deny Allow from all </Location> Nº 153 Tomcat: config. del conector AJP Instalación y Administración de Apache Tomcat En el lado de Tomcat, las peticiones AJP se reciben en un conector AJP independiente del módulo que esté usando Apache <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> Ejercicio M8E2 Nº 154 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat Tomcat proporciona conectores HTTP eficientes que lo convierten en una opción válida para una configuración standalone La configuración con un servidor web actuando de front-end puede seguir teniendo sentido (para montar un cluster, por ejemplo) La comunicación entre un servidor web y Tomcat se hace mediante un protocolo eficiente llamado AJP que implica la inclusión de módulos en el servidor web y la activación de un conector AJP en Tomcat Nº 155 Instalación y Administración de Apache Tomcat Módulo 9 Seguridad Nº 156 Objetivos Instalación y Administración de Apache Tomcat Asegurar la instalación de Tomcat Entender el soporte de autenticación para las aplicaciones Web Configurar el soporte para cifrado SSL Nº 157 Verificar la integridad de la descarga Instalación y Administración de Apache Tomcat Es importante asegurarnos que el código que nos descargamos no ha sido modificado por una fuente maliciosa Para verificarlo disponemos de dos opciones Funciones de hash MD5 claves PGP En Windows hay diferentes herramientas que calculan las funciones de hash Nº 158 Eliminar las aplicaciones por defecto ROOT, tomcat-docs y examples Instalación y Administración de Apache Tomcat No aportan funcionalidad en producción Riesgo mínimo pero potencialmente podría haber un exploit manager y host-manager Por su funcionalidad (tareas administrativas) presentan el mayor riesgo Deberían ser eliminadas por completo Si fueran necesarias: Cambiar el mecanismo de autenticación de BASIC a un tipo más seguro Permitir sólo el acceso de direcciones específicas Elegir un usuario y password difícil de adivinar Nº 159 Cambiar el comando de SHUTDOWN Instalación y Administración de Apache Tomcat Ya hemos visto que el componente Server permite configurar un puerto y un comando de apagado del servidor Se debería cambiar el puerto y la palabra clave por defecto <Server port=“8123” shutdown=“byebye” /> También es una buena idea bloquear el acceso al puerto mediante un firewall Nº 160 Instalación y Administración de Apache Tomcat Ejecutar Tomcat con una cuenta restringida Si un atacante se hace con el control de Tomcat es importante que el usuario que lo ejecuta no tenga privilegios para dañar el sistema El Unix / Linux crear un usuario cuyos únicos privilegios sea ejecutar Tomcat En Windows crear un usuario no administrativos y utilizar la utlidad Servicios de las carpeta Herramientas administrativas para establecer el usuario Nº 161 Instalación y Administración de Apache Tomcat Gestor de servicios Nº 162 Asegurar el sistema de ficheros (I) Instalación y Administración de Apache Tomcat En Windows sólo podremos restringir acceso a ficheros si con NTFS (con FAT32 no hay nada que hacer) NTFS se basa en listas de control de acceso: se puede establecer qué usuarios acceden a un recurso Deberíamos denegar el acceso a todos los ficheros de todas las particiones En Unix / Linux los permisos se establecen explícitamente mediante usuarios y grupos Nº 163 Asegurar el sistema de ficheros (II) Instalación y Administración de Apache Tomcat Conceder permisos de lectura y ejecución sobre los ficheros de la JRE Conceder permisos de lectura sobre <TOMCAT_HOME>/bin <TOMCAT_HOME>/lib <TOMCAT_HOME>/webapps (aunque esto inhabilita el uso del manager como herramienta para desplegar nuevas webapps) Conceder permisos de lectura y escritura sobre <TOMCAT_HOME>/conf Nº 164 Instalación y Administración de Apache Tomcat Utilizar el gestor de seguridad de Java La arquitectura de seguridad de Java está basada en permisos Una vez activado (no lo está por defecto), las aplicaciones deberán tener permiso explícito para realizar ciertas tareas Los permisos se conceden mediante ficheros de políticas El fichero de políticas de Tomcat es <TOMCAT_HOME>/conf/cataina.policy Para activar el gestor: <TOMCAT_HOME>/bin/catalina start -security Nº 165 Proteger aplicaciones web Instalación y Administración de Apache Tomcat Hasta ahora hemos visto como proteger Tomcat y la plataforma Las seguridad a nivel de aplicación puede categorizarse en; Autenticación y Realm Cifrado Restricción de Host Nº 166 Autenticación y Realm Instalación y Administración de Apache Tomcat Autenticar es el proceso de determinar y validar la identidad de un cliente J2EE proporciona la API JAAS (Java Autentication and Authorization Service) como mecanismo estándar de autenticación El uso de JAAS garantiza la portabilidad del mecanismo de autenticación entre diferentes servidores El mecanismo de Realm de Tomcat es una implementación de JAAS Nº 167 Mecanismos de autenticación Instalación y Administración de Apache Tomcat BASIC DIGEST Formularios Certificado de cliente HTTP Nº 168 Mecanismo BASIC Instalación y Administración de Apache Tomcat Es una aproximación simplista El navegador envía credenciales (user y password) cifradas en base64 al servidor que descifrará y utilizará para autentificar Problemas base64 no es un mecanismo de cifrado seguro Los navegadores guardan en caché las credenciales Nº 169 Mecanismo DIGEST Instalación y Administración de Apache Tomcat Es similar a BASIC con la diferencia que la contraseña se transmite de forma segura El cliente aplica una función de hash sobre la contraseña y transmite el resultado al servidor. Éste realiza la misma operación sobre el password que tiene almacenado y compara los resultados Problemas La contraseña original debe almacenarse en algún lugar (habrá que proteger adecuadamente este recurso) El navegador guarda en caché las credenciales Java soporta los hash MD5 y SHA Nº 170 Mecanismo de formularios Instalación y Administración de Apache Tomcat El navegador no coopera y es la aplicación web la que tiene que crear un formulario que permita enviar las credenciales La transmisión de los datos se puede hacer sobre HTTPS garantizando el cifrado de datos Problema Sigue habiendo dependencia de usuarios y credenciales que pueden obtenerse por fuerza bruta o ingeniería social Nº 171 Mecanismo de certificados digitales Instalación y Administración de Apache Tomcat Se utilizan certificados digitales de manera simétrica El cliente puede estar seguro que se conecta al servidor que pretendía (como certifica una entidad externa como VeriSign) mediante la clave pública El servidor recibe un certificado del cliente que le permite autenticarlo Es un sistema muy seguro aunque generalmente se usan mecanismos más sencillos como la autenticación a través de formularios sobre HTTPS Nº 172 Configurar la aplicación web Instalación y Administración de Apache Tomcat web.xml … <security-constraint> <display-name>todo</display-name> <web-resource-collection> <web-resource-name>TodaLaAplicacion</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>administrador</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>MiRealm</realm-name> </login-config> <security-role> <role-name>administrador</role-name> </security-role> …. Nº 173 Configurar los Realm en Tomcat Instalación y Administración de Apache Tomcat El modelo se construye sobre los conceptos de usuarios y roles La aplicación declara en su descriptor qué roles pueden acceder a qué recursos y los usuarios que dispongan de ese rol tendrán acceso Los Realm, se configuran en Tomcat (no en la aplicación) y así se pueden añadir y borrar usuarios dinámicamente Existen diferentes implementaciones: JDBCRealm, DataSourceRealm, JNDIRealm, MemoryRealm, JAASRealm Nº 174 MemoryRealm Instalación y Administración de Apache Tomcat Los usuarios y roles se almacenan en un fichero de texto editable (p.e. XML) que se carga en memoria mis-usuarios.xml <tomcat-users> <role rolename="administrador"/> <user username="admin" password="admin2" roles="administrador"/> </tomcat-users> context.xml <Context path="/M3E1"> <Realm className="org.apache.catalina.realm.MemoryRealm" pathname="conf/mis-usuarios.xml" /> </Context> Ejercicio M9E1 Nº 175 JDBCRealm Almacena las credenciales en una base de datos Instalación y Administración de Apache Tomcat users PK login user_roles PK,FK1 PK login role password <Realm className=“org.apache.catalina.realm.JDBCRealm” driverName=“com.mysql.jdbc.Driver” connectionURL=“jdbc:mysql://localhost/autoridad” connectionName=“tomcat” connectionPassword=“tomcat” userTable=“users” userNameCol=“login” userCredCol=“password” userRoleTable=“user_roles” roleNameCol=“role” digest=“md5”/> Ejercicio M9E2 Nº 176 Cifrado SSL Instalación y Administración de Apache Tomcat Protocolo que permite una conexión segura entre clientes y servidores en una red Tiene protocolos de clave pública/privada y de clave simétrica HTTPS utiliza HTTP sobre SSL para ofrecer encriptación y autenticación fiable Nº 177 Añadir soporte SSL a Tomcat Instalación y Administración de Apache Tomcat Descargar e instalar una implementación SSL (podemos usar la librería JSSE estándar de Java o la implementación nativa APR) Crear un almacén de claves de certificado al que añadiremos un certificado que firmaremos nosotros Obtener un certificado de una agencia de certificación externa como VeriSign para que los usuarios puedan confiar en nuestro certificado (en desarrollo podemos obviar este paso) Configurar Tomcat para SSL Nº 178 Preparar el almacén de claves Lo hacemos mediante la herramienta Instalación y Administración de Apache Tomcat <TOMCAT_HOME>/bin/keytool Nº 179 Configuración de Tomcat Instalación y Administración de Apache Tomcat Situamos el almacén de claves y configuramos el conector Conector Java <Connector port=“8443” scheme=“https” secure=“true” SSLEnabled=“true” keystoreFile=“store” sslProtocol=“TLS” keystorePass=“clave-segura” /> Conector Nativo APR <Connector protocol=“org.apache.coyote.http11.HttpAprProtocol” port=“8443” scheme=“https” secure=“true” SSLEnabled=“true” SSLCertificateFile=“/mycertdir/server.crt” SSLCertificateKeyFile=“/mycertdir/ssl/server.pem” /> Nº 180 Configurar la webapp para que use SSL Instalación y Administración de Apache Tomcat Hay que editar el descriptor de despliegue para añadir una user-data-constraint especificando protocolo CONFIDENTIAL web.xml <security-constraint> <display-name>todo</display-name> <web-resource-collection> <web-resource-name>TodaLaAplicacion</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>administrador</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> Ejercicio M9E3 Nº 181 ¿Qué hemos visto? Instalación y Administración de Apache Tomcat Hay que personalizar la configuración por defecto de Tomcat cuando esté en entorno de producción para garantizar la seguridad J2EE define un estándar de autentificación para la aplicaciones web que se basa en Realms que Tomcat implementa Tomcat tiene conectores que proporcionan SSL Nº 182 Instalación y Administración de Apache Tomcat Módulo 10 Alojamiento Compartido Nº 183 Objetivos Instalación y Administración de Apache Tomcat Entender las nociones de alojamiento compartido Nº 184 ¿Qué es el alojamiento compartido? Instalación y Administración de Apache Tomcat Pequeñas organizaciones es posible que no puedan permitirse tener su propio Tomcat (máquinas, ingenieros, etc.) Se puede subcontratar el servidor a un proveedor de servicios Estos proveedores suelen proporcionar soluciones en las que se comparten recursos: bases de datos, servidores de correo, firewall, servidores web y servidores de aplicaciones Nº 185 Alojamiento virtual Instalación y Administración de Apache Tomcat El alojamiento virtual se refiere a que una misma máquina física proporciona más de un servidor web (o de aplicaciones) Tipos Basado en IP: cada dominio web necesita tener una dirección IP diferente que es lo que usa el servidor para diferenciar peticiones Basado en nombres: los dominios pueden compartir IP y las peticiones se diferencian por nombre Nº 186 Alojamiento virtual basado en IP Instalación y Administración de Apache Tomcat Necesitamos que la máquina tenga más de una IP válida Funciona con todos los clientes HTTP (aunque usen la versión 1.0) El número de hosts virtuales máximo está limitado y la administración asociada a la gestión de muchas IPs puede ser tediosa Nº 187 Alojamiento virtual basado en nombres Instalación y Administración de Apache Tomcat La máquina no necesita más de una dirección IP Para poder funcionar se basa en la cabecera Host que es una característica de HTTP 1.1 por lo que es posible que no todos los clientes puedan conectarse La administración es más sencilla Nº 188 Configurar Tomcat para alojamiento virtual basado en nombres Instalación y Administración de Apache Tomcat Está disponible desde las primeras versiones Consiste en añadir nuevas entradas Host a nivel de Engine server.xml <Engine name=“Catalina” defaultHost=“dominio1.com” debug=“0”> … <Host name=“dominio1.com” debug=“0” autoDeploy=“true” unpackWar=“true” appBase=“/websites/dominio/webapps” /> <Host name=“dominio2.com” debug=“0” autoDeploy=“true” unpackWar=“true” appBase=“/websites/dominio/webapps” /> </Engine> Nº 189 Configurar Tomcat para alojamiento virtual basado en IP Instalación y Administración de Apache Tomcat Es una característica nueva desde la 5.5 La configuración es prácticamente la misma excepto en que activamos un atributo a nivel de conector que fuerza a ignorar la cabecera Host de HTTP/1.1 con lo que sólo se usará la IP server.xml <Connector port=“8080” protocol=“HTTP/1.1” redirectPort=“8443” useIPVHosts=“true”> … <Engine name=“Catalina” defaultHost=“dominio1.com” debug=“0”> … <Host name=“dominio1.com” debug=“0” autoDeploy=“true” unpackWar=“true” appBase=“/websites/dominio/webapps” /> <Host name=“dominio2.com” debug=“0” autoDeploy=“true” unpackWar=“true” appBase=“/websites/dominio/webapps” /> </Engine> Nº 190 Configuración con front-end y alojamiento virtual Instalación y Administración de Apache Tomcat Apache también se puede configurar para trabajar con los dos modos de alojamiento virtual Tomcat también soporta el modo de alojamiento virtual teniendo un front-end Apache Nº 191 Arquitectura en modo front-end Instalación y Administración de Apache Tomcat Apache Cliente Web Tomcat Gestor de peticiones Host Virtual 1 Host Virtual 2 … Módulo de Host Virtual Host Virtual N mod_jk Nº 192 Conector AJP ¿Qué hemos visto? Instalación y Administración de Apache Tomcat El alojamiento virtual tiene sentido cuando se quiere compartir el mismo servidor entre diferentes usuarios Existe alojamiento virtual por IP o por nombre Tomcat 6 en modo standalone soporta ambos También se puede configurar con un front-end Nº 193