Apache Tomcat 8
Avant-propos • Préambule • La plate-forme Java EE • Installation et configuration • Administration du serveur • Déploiement et gestion des applications • La sécurité du serveur et des applications • Analyse et supervision • Clustering et supervision • Utiliser Tomcat pour le développement • Installation et configuration de MySQL • Installation et configuration d’OpenLDAP
Pour plus d’informations :
39 €
Apache Tomcat 8
Les chapitres du livre
Etienne LANGLET est formateur, consultant et développeur sur les technologies Java/Java EE mais également spécialiste des produits Open Source. Dans ce contexte, il a eu l’occasion de mettre en œuvre des serveurs Tomcat en environnement d’entreprise et propose ainsi au lecteur un ouvrage réellement opérationnel sur le sujet.
ISBN : 978-2-7460-8633-3
Ce livre sur Apache Tomcat 8 s’adresse à toute personne appelée à mettre en œuvre ce serveur d’applications sous Windows ou Linux, que ce soit pour des besoins de test, de développement, ou des besoins de production dans un environnement d’entreprise. Les premiers chapitres permettent de faire quelques rappels essentiels sur les technologies Internet et Java/Java EE, massivement utilisées par Tomcat. Les chapitres suivants se concentrent sur les aspects fondamentaux de l’administration d’un serveur d’application tels que l’installation, en tenant compte des contraintes d’entreprise, la gestion des applications ou encore la configuration de Tomcat 8. Enfin les derniers chapitres traitent des sujets plus avancés que sont la sécurité, la supervision du serveur et l’optimisation des performances, la mise en cluster de serveurs, pour conclure sur l’utilisation de Tomcat 8 lors des phases de développement d’applications. Avec un tel livre, le lecteur possède toutes les clés pour mettre en place une véritable infrastructure d’entreprise sécurisée et performante. Si le lecteur est familier d’une version précédente de Tomcat, il pourra approfondir ses connaissances en trouvant dans ces pages une information précise pour une mise en application immédiate.
Guide d’administration du serveur Java EE 7
Guide d’administration du serveur Java EE 7 sous Windows et Linux
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 sous Windows et Linux
Etienne LANGLET
Table des matières
Avant-propos 1. À qui s’adresse ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2. Les pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Chapitre 1
Préambule 1. Rappel sur les architectures Internet/Intranet/Extranet . . . . . . . . . . 13 1.1 Le protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.1.1 Les méthodes HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.1.2 Les codes d’état HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.1.3 Les en-têtes HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.1.4 Gestion des sessions utilisateurs : les cookies HTTP . . . 20 1.2 Les serveurs Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.3 Les technologies côté client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.4 Les technologies côté serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.5 Les architectures n/tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2. Apache Tomcat et Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1 La fondation Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.2 Java chez Apache : le projet Jakarta . . . . . . . . . . . . . . . . . . . . . . 27 2.3 Les évolutions de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4 La plate-forme Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.4.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.4.2 Java aujourd’hui. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.4.3 Java et Tomcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1
2
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 Chapitre 2
La plate-forme Java EE 1. La plate-forme Java Enterprise Edition (Java EE) . . . . . . . . . . . . . . . . 35 1.1 Le Java Community Process (JCP). . . . . . . . . . . . . . . . . . . . . . . . 36 1.2 Une forte dépendance : les annotations . . . . . . . . . . . . . . . . . . . 37 2. Les composants Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.1 Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.2 JavaServer Pages : JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.3 Enterprise JavaBeans : EJB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.4 Les entités Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5 La technologie Web Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3. La plate-forme de service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.1 JDBC : Java DataBase Connectivity . . . . . . . . . . . . . . . . . . . . . . 45 3.2 JNDI : Java Naming & Directory Interface . . . . . . . . . . . . . . . . 45 3.3 JMS : Java Message Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.4 JavaMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.5 JTA : Java Transaction API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.6 RMI/IIOP : Remote Method Invocation/ Internet InterORB Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.7 JCA : Java EE Connector Architecture . . . . . . . . . . . . . . . . . . . . 47 3.8 JAAS : Java Authentication and Authorization Service. . . . . . . 47 3.9 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4. Les applications Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.1 Le modèle de développement MVC . . . . . . . . . . . . . . . . . . . . . . 49 4.2 Les différents modules Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2.1 Modules Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.2 Modules EJB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.3 Modules clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.2.4 Modules de connecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.3 Structure et packaging des applications . . . . . . . . . . . . . . . . . . . 52
Table des matières 5. Les applications Web Java EE et Tomcat . . . . . . . . . . . . . . . . . . . . . . 54 5.1 Structure et arborescence d’une application Web . . . . . . . . . . . 54 5.2 Le descripteur de déploiement : web.xml . . . . . . . . . . . . . . . . . . 56 5.3 Les sessions HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6. Les serveurs d’applications Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.1 Rôles d’un serveur d’applications . . . . . . . . . . . . . . . . . . . . . . . . 62 6.2 Architecture d’un serveur d’applications . . . . . . . . . . . . . . . . . . 63 6.3 Les produits du marché . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.4 Le cas Apache Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Chapitre 3
Installation et configuration 1. Les différentes versions de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2. Distribution de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3. Installation de la plate-forme Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.1 Quelle version choisir ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2 Installation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2.1 Sous Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2.2 Sous Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4. Installation du serveur Tomcat 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.1 Sous Microsoft Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.1.1 Installation à partir du package Windows. . . . . . . . . . . . 77 4.1.2 Installation à partir de l’archive ZIP. . . . . . . . . . . . . . . . . 78 4.1.3 Création d’un service Windows pour Tomcat 8 . . . . . . . 79 4.2 Sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.2.1 Installation à partir des paquets RPM . . . . . . . . . . . . . . . 80 4.2.2 Installation à partir d’une archive . . . . . . . . . . . . . . . . . . 82 4.2.3 Démarrer Tomcat 8 à l’amorçage du système . . . . . . . . . 82
3
4
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 5. Coupler Tomcat avec un serveur Web . . . . . . . . . . . . . . . . . . . . . . . . 84 5.1 Pourquoi utiliser un serveur Web frontal ? . . . . . . . . . . . . . . . . . 84 5.2 Les différents connecteurs pour l’intégration avec un serveur Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.2.1 Le protocole AJP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.2.2 Les modules AJP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.3 Utiliser le serveur Web Apache . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.3.1 Configurer Tomcat et Apache avec un module AJP . . . . 87 5.3.2 Installer et configurer Apache. . . . . . . . . . . . . . . . . . . . . . 87 5.3.3 Installer et configurer Tomcat 8. . . . . . . . . . . . . . . . . . . . 90 5.3.4 Le module mod_jk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.3.5 Les modules mod_proxy et mod_proxy_ajp . . . . . . . . . 103 5.4 Utiliser le serveur Web Microsoft IIS . . . . . . . . . . . . . . . . . . . . 104 5.4.1 Configurer Tomcat et IIS avec le redirecteur JK . . . . . . 104 5.4.2 Configurer Tomcat 8 pour le redirecteur JK . . . . . . . . . 104 5.4.3 Installer et configurer le redirecteur JK . . . . . . . . . . . . . 105 5.5 Configurer les serveurs Web pour servir les ressources statiques . . . . . . . . . . . . . . . . . . . . . . 112 Chapitre 4
Administration du serveur 1. Architecture du serveur Tomcat 8. . . . . . . . . . . . . . . . . . . . . . . . . . . 117 1.1 Les différents composants de Tomcat 8 . . . . . . . . . . . . . . . . . . 117 1.2 Arborescence de l’installation . . . . . . . . . . . . . . . . . . . . . . . . . . 119 2. Le fichier server.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2.1 Les éléments de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 121 2.1.1 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 2.1.2 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 2.1.3 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . 124 2.1.4 L’élément . . . . . . . . . . . . . . . . . . . . . . . . 125 2.1.5 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 2.1.6 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Table des matières 2.1.7 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . 131 2.1.8 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 2.1.9 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 2.1.10 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . 136 2.1.11 L’élément . . . . . . . . . . . . . . . . . . . . . . . . 138 2.1.12 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . 140 2.1.13 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 2.1.14 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 3. Les autres fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 152 3.1 Le fichier web.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 3.1.1 Configuration de filtres. . . . . . . . . . . . . . . . . . . . . . . . . . 156 3.1.2 Les filtres Tomcat 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 3.2 Le fichier tomcat-users.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 3.3 Le fichier catalina.policy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 4. Configuration des ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 4.1 Visibilité et portée des ressources . . . . . . . . . . . . . . . . . . . . . . . 165 4.2 Pools de connexions et DataSource JDBC . . . . . . . . . . . . . . . . 167 4.2.1 La connectivité aux bases de données . . . . . . . . . . . . . . 167 4.2.2 Le pooling de connexions JDBC . . . . . . . . . . . . . . . . . . . 169 4.2.3 Configuration d’un pool de connexions JDBC avec Tomcat 8 . . . . . . . . . . . . . . . 170 4.2.4 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 4.3 Sessions JavaMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 4.4 JavaBeans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.5 Entrées d’environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
5
6
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 Chapitre 5
Déploiement et gestion des applications 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 2. Déployer une application dans Tomcat 8 . . . . . . . . . . . . . . . . . . . . . 183 2.1 Déploiement automatique d’applications. . . . . . . . . . . . . . . . . 184 2.2 Utiliser le répertoire webapps/ . . . . . . . . . . . . . . . . . . . . . . . . . 184 2.3 L’élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 2.4 Déploiement avec XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 3. Les ressources des applications Web . . . . . . . . . . . . . . . . . . . . . . . . . 187 3.1 Introduction et concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 3.2 Les éléments de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 188 3.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 4. L’application manager de Tomcat 8 . . . . . . . . . . . . . . . . . . . . . . . . . 190 4.1 L’interface texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 4.1.1 Installer une application sous Tomcat 8 . . . . . . . . . . . . 193 4.1.2 Mettre à jour une application. . . . . . . . . . . . . . . . . . . . . 195 4.1.3 Démarrer et arrêter une application. . . . . . . . . . . . . . . . 195 4.1.4 Recharger une application. . . . . . . . . . . . . . . . . . . . . . . . 196 4.1.5 Supprimer une application . . . . . . . . . . . . . . . . . . . . . . . 197 4.1.6 Obtenir des informations . . . . . . . . . . . . . . . . . . . . . . . . 197 4.1.7 Les messages d’erreur du manager . . . . . . . . . . . . . . . . . 200 4.2 L’interface HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 4.2.1 Déployer des applications localement . . . . . . . . . . . . . . 202 4.2.2 Déployer des applications à distance . . . . . . . . . . . . . . . 203 4.3 L’interface ANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 5. Le Deployer de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 5.1 Automatiser le déploiement des applications. . . . . . . . . . . . . . 208
Table des matières Chapitre 6
La sécurité du serveur et des applications 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 2. Authentification, autorisation et cryptage : le modèle de sécurité Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 2.1 Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 2.2 Autorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 2.3 Cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 2.4 La sécurité des applications Web Java EE . . . . . . . . . . . . . . . . . 217 3. Les Realms de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 3.1 User Database Realm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 3.2 JDBC Realm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 3.3 DataSource Realm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 3.4 JNDI Realm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 3.5 JAAS Realm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 3.6 Combined Realm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 3.7 LockOut Realm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 4. Configuration de Tomcat pour le Single Sign-On . . . . . . . . . . . . . . 246 4.1 La Valve d’authentification unique . . . . . . . . . . . . . . . . . . . . . . 246 5. Sécurisation avec SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 5.1 Génération des certificats et clés de cryptage . . . . . . . . . . . . . . 248 5.2 Configuration du connecteur HTTPS. . . . . . . . . . . . . . . . . . . . 251 5.3 Utiliser le serveur Web Apache comme serveur frontal HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . 253 6. Restrictions d’accès. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 6.1 Restriction par adresse IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 6.2 Restriction par nom de machine . . . . . . . . . . . . . . . . . . . . . . . . 256 7. Le gestionnaire de sécurité : utiliser Tomcat en mode sécurisé . . . . 256 7.1 Lancer Tomcat en mode sécurisé. . . . . . . . . . . . . . . . . . . . . . . . 259 7.2 Configuration du gestionnaire de sécurité pour Tomcat. . . . . 259
7
8
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 8. Autres considérations de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 8.1 Exécuter Tomcat 8 avec un compte sans privilèges . . . . . . . . . 262 8.1.1 Configuration sous Windows. . . . . . . . . . . . . . . . . . . . . 262 8.1.2 Configuration sous Linux . . . . . . . . . . . . . . . . . . . . . . . . 264 Chapitre 7
Analyse et supervision 1. Les fichiers journaux de Tomcat 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 267 1.1 Configuration des journaux de Tomcat 8. . . . . . . . . . . . . . . . . 267 1.1.1 Le système de journalisation de Tomcat 8. . . . . . . . . . . 267 1.1.2 Structure du fichier logging.properties . . . . . . . . . . . . . 268 1.1.3 Le fichier logging.properties par défaut . . . . . . . . . . . . . 272 1.2 Configuration des journaux avec Log4J . . . . . . . . . . . . . . . . . . 273 1.2.1 Le système de journalisation Log4J . . . . . . . . . . . . . . . . 273 1.2.2 Utiliser Log4J avec Tomcat. . . . . . . . . . . . . . . . . . . . . . . 273 2. Tester la montée en charge du serveur . . . . . . . . . . . . . . . . . . . . . . . 276 2.1 Apache JMeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 2.1.1 Écrire des plans de test Web avec JMeter. . . . . . . . . . . . 278 2.1.2 Plans de test avancés : les composants de JMeter . . . . . 283 2.1.3 Stratégie de conception des tests : un exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 2.2 Optimisation et reconfiguration de Tomcat . . . . . . . . . . . . . . 292 2.2.1 Les paramètres d’optimisation de Tomcat 8 . . . . . . . . . 292 2.2.2 La machine virtuelle Java . . . . . . . . . . . . . . . . . . . . . . . . 297 3. Utiliser l’interface JMX de Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . 299 3.1 Qu’est-ce que JMX ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 3.2 JMX et Tomcat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 3.3 Utiliser un client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 3.3.1 Configurer la machine virtuelle de Tomcat 8 . . . . . . . . 304 3.3.2 Configurer Tomcat 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 3.3.3 Lancement de JConsole. . . . . . . . . . . . . . . . . . . . . . . . . . 307
Table des matières Chapitre 8
Clustering avec Tomcat 8 1. Introduction au clustering avec Tomcat 8 . . . . . . . . . . . . . . . . . . . . 309 2. Une solution de haute disponibilité avec Tomcat 8. . . . . . . . . . . . . 310 2.1 Une infrastructure disponible et performante . . . . . . . . . . . . . 310 3. Configuration d’un cluster Tomcat 8 . . . . . . . . . . . . . . . . . . . . . . . . 311 3.1 Installer plusieurs instances de Tomcat 8 sur la même machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 3.2 Répartition de charge avec les modules AJP . . . . . . . . . . . . . . . 314 3.2.1 Configuration avec Apache HTTP Server et mod jk. . . 315 3.2.2 Configuration avec Apache HTTP Server et mod_proxy_ajp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 3.2.3 Configuration avec Microsoft IIS. . . . . . . . . . . . . . . . . . 319 3.3 Configuration d’un cluster Tomcat 8 en mode maître/esclave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 4. Maintenir l’état des clients dans un cluster . . . . . . . . . . . . . . . . . . . 321 4.1 La problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 4.2 Les solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 4.2.1 La réplication de mémoire à mémoire . . . . . . . . . . . . . . 324 4.2.2 Les sessions persistantes sur système de fichiers. . . . . . 331 4.2.3 Les sessions persistantes en base de données. . . . . . . . . 334 5. Déploiement d’applications dans un cluster Tomcat 8 . . . . . . . . . . 337 5.1 Configuration du deployer en cluster . . . . . . . . . . . . . . . . . . . . 337 5.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Chapitre 9
Utiliser Tomcat pour le développement 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 2. Développer avec Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 2.1 Les perspectives et les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 2.2 Les plug-ins d’Eclipse pour Tomcat. . . . . . . . . . . . . . . . . . . . . . 342
9
10
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 3. Développer avec NetBeans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 3.1 Configuration d’un serveur Tomcat 8 . . . . . . . . . . . . . . . . . . . 352 4. Apache ANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 4.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 4.2 Construction d’un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 4.3 Générer les archives de déploiement . . . . . . . . . . . . . . . . . . . . . 360 4.4 Déployer sur le serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 5. Intégration de librairies tierces-parties . . . . . . . . . . . . . . . . . . . . . . . 363 5.1 Exemples avec Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 5.2 Exemple avec Hibernate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 5.3 Pour conclure... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Annexe A
Installation et configuration de MySQL 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 2. Téléchargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 3. Installation sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 4. Installation sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Annexe B
Installation et configuration d'OpenLDAP 1. Installation sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 2. Installation sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 4. Installation de JXplorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 5. Importation d’un fichier LDIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
211
Chapitre 6
La sécurité du serveur et des applications 1. Introduction
La sécurité du serveur et des applications
La sécurité informatique est un très vaste sujet qu’il est, aujourd’hui, impossible de ne pas traiter dans un ouvrage comme celui-ci. L’objectif de ce chapitre est de présenter les différents moyens utilisables pour sécuriser un serveur Tomcat mais également les applications qu’il héberge et pour garantir un accès fiable à ses services.
2. Authentification, autorisation et cryptage : le modèle de sécurité Java EE L’authentification est le procédé qui permet de déterminer et de valider l’identité d’un client d’une application. Les technologies Java EE, et plus particulièrement la spécification Servlet, proposent un mécanisme pour gérer cette authentification, et ce, de manière standard entre les serveurs d’applications et les conteneurs Web, grâce à l’API JAAS.
212
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 Cependant, il est tout à fait possible que les concepteurs et développeurs d’une application implémentent leur propre mécanisme pour l’authentification, cependant en cas de modification du registre contenant les données d’authentification, l’application doit s'adapter, JAAS permet de s’affranchir de cette contrainte : c’est le serveur d’applications qui fait l’interface avec le registre utilisateur.
2.1 Authentification Un conteneur Web comme Tomcat possédant un moteur HTTP peut tout à fait utiliser les mécanismes d’authentification habituellement mis en œuvre par les serveurs Web : ce sont les mécanismes d’authentification HTTP ou schémas d’authentification HTTP. Le principe est le suivant : lorsqu’un client tente d’accéder à une ressource protégée d’un site ou d’une application Web, le serveur renvoie le code d’état HTTP 401 au navigateur, indiquant à celui-ci que la ressource demandée est protégée et que son accès est soumis à authentification. En réaction à ce code 401, le navigateur affiche une boîte de dialogue de saisie d’informations d’identification au client : si l’authentification aboutit, la ressource est envoyée dans la réponse, sinon c’est le code d’état 403 (Forbidden) associé à une page d’erreur qui est envoyé. Pour implémenter ce mécanisme il faut utiliser un des trois schémas d’authentification HTTP : – L’authentification de base (BASIC). – L’authentification codée (DIGEST). L’authentification de base (Basic Auth) est, comme son nom l’indique, le schéma d’authentification le plus simple. Lorsque le client valide les informations d’identification saisies dans la boîte de dialogue que lui présente le navigateur, ces informations sont transmises simplement en étant encodées avec l’algorithme Base64. Cet algorithme est connu et il est très facile de récupérer les données en clair. Une fois que le client est authentifié, le navigateur conserve les informations d’authentification en cache et il n’y pas d’autre moyen que de fermer le navigateur pour déconnecter le client.
© Editions ENI - All rights reserved
– L’authentification par certificat client (CLIENT-CERT).
La sécurité du serveur et des applications Chapitre 6 L’authentification codée (Digest Auth) offre les mêmes fonctionnalités que l’authentification de base, mais les informations d’authentification sont cryptées grâce à un mécanisme appelé hachage (en anglais, digest). Le principe est que l’élément qui a été crypté par hachage n’est pas décryptable : le hachage est irréversible. Le processus d’authentification codée se déroule de la manière suivante : – Le serveur envoie la demande d’authentification au navigateur client, avec cette demande, il transmet une chaîne de caractères qui sera utilisée par le processus de hachage. – Le navigateur ajoute cette chaîne au mot de passe du client et fait le cryptage avec un algorithme de hachage, tel que SHA ou MD5. – Le résultat du hachage est envoyé au serveur. – Le serveur récupère le nom d'utilisateur et le mot de passe en clair à partir du registre d'authentification. Le serveur utilise ensuite la chaîne de hachage transmise au client pour faire le hachage. – L’authentification aboutit uniquement si les deux valeurs de hachage, celle transmise par le client, et celle générée par le serveur sont strictement identiques. À noter que ce mécanisme ne réalise le cryptage que pour l’authentification, les données qui transitent ensuite ne sont pas cryptées. Enfin, l’authentification par certificat client (Client-Cert Auth) utilise les certificats HTTPS pour garantir au client l’identité d’un serveur si le certificat est signé par un organisme digne de confiance appelé autorité de certification (des sociétés telles que VeriSign par exemple). Le serveur envoie sa clé publique au client par un moyen ou par un autre, le client installe le certificat dans le navigateur, ensuite, les requêtes de ce client sont cryptées grâce à la clé publique du serveur, et sont décryptables uniquement par le serveur grâce à sa clé privée. Les données étant transmises en utilisant le protocole HTTPS, c’est le schéma d’authentification le plus sécurisé.
213
214
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 Malheureusement, aujourd’hui, tous ces mécanismes d’authentification ne sont pas supportés par tous les navigateurs Web. Dans le cas de la mise en œuvre de la sécurité dans un contexte intranet, l’infrastructure matérielle et logicielle est maîtrisée : les postes de travail utilisateur peuvent être mis à jour pour supporter un schéma d’authentification plutôt qu’un autre, or c’est difficilement envisageable dans un contexte Internet… Aussi, dans la majorité des cas d’utilisation actuels, le schéma utilisé est l’authentification de base, mais les données ne sont pas véhiculées en HTTP mais en HTTPS pour crypter les flux échangés. Un autre mécanisme d’authentification existe dans les spécifications servlet, il s’agit de l’authentification par formulaire (Form-based Auth). Dans ce cas, le navigateur n’intervient pas pour fournir un moyen à l’utilisateur de s’identifier, mais un formulaire HTML est utilisé par le serveur, il est présenté au client à partir du moment où celui-ci tente d’accéder à des données protégées. Lorsque le formulaire est rempli et validé, les données d’authentification de l’utilisateur sont transmises à une servlet système du serveur d’applications, qui transmet ces données au serveur pour l’authentification dans le registre utilisateur. Ce mécanisme est très utilisé car il possède de nombreux avantages. D’abord le fait d’utiliser un formulaire HTML permet de personnaliser l’interface d’authentification, les données sont également facilement transmissibles en HTTPS, de ce fait, la sécurité repose à la fois sur une authentification par nom d’utilisateur et mot de passe, et sur le cryptage des données transmises. Un autre avantage est qu’il utilise les sessions HTTP et qu’il est par conséquent très facile de déconnecter un client.
Le modèle de sécurité des applications Java EE utilise la notion d’utilisateur et de rôle pour gérer les autorisations d’accès. Le serveur d’applications qui gère le mécanisme est lié au registre utilisateur qui contient les comptes utilisateurs, les rôles, ainsi que les associations entre ces comptes d’utilisateurs et les rôles auxquels ces utilisateurs peuvent prétendre.
© Editions ENI - All rights reserved
2.2 Autorisation
La sécurité du serveur et des applications Chapitre 6 Une application peut déclarer un ensemble de ressources protégées et uniquement accessibles aux utilisateurs disposant d’un rôle particulier. Un utilisateur obtient un rôle pendant son authentification : une fois son identité vérifiée, le serveur d’applications ou le conteneur Web demande au registre utilisateur la liste des rôles pour cet utilisateur, ces rôles sont présentés pour l’accès à la ressource, et s’il y a correspondance, la ressource concernée est autorisée à l’utilisateur. L’application déclare un ou plusieurs rôles pour restreindre les accès, l’association entre les rôles déclarés dans l’application et les utilisateurs stockés dans le registre d’authentification se fait en général au moment du déploiement de l’application. L’administrateur a également la possibilité de revenir sur cette association ultérieurement. Cette séparation permet d’utiliser des registres d’authentification différents simplement par configuration du serveur d’applications, sans impact sur le code des applications.
2.3 Cryptage Le cryptage des données entre un client et un serveur Web se fait en utilisant une variante du protocole HTTP qui transite dans un canal sécurisé grâce à un protocole réseau qui crypte les données. SSL (Secure Socket Layer) est un protocole qui permet de transmettre des données de manière sécurisée entre un client et un serveur. Développé par la société Netscape Inc., SSL a été très rapidement adopté en tant que protocole standard de l’Internet. Le protocole SSL repose sur deux mécanismes de sécurité, le cryptage à clé publique et le cryptage à clé symétrique. Le cryptage à clé publique fait intervenir une paire de clé, la clé publique, qui est librement diffusée et disponible, et la clé privée qui est soigneusement conservée par son propriétaire. Tout ce qui est crypté avec la clé privée n’est décryptable qu’avec la clé publique, et inversement, tout ce qui est crypté avec la clé publique n’est décryptable qu’avec la clé privée.
215
Apache Tomcat 8 Guide d’administration du serveur Java EE 7 Le cryptage à clé symétrique utilise le même mécanisme pour le cryptage et le décryptage des données. Cependant, il ajoute également un procédé permettant à un client de récupérer la clé publique du serveur en toute sécurité. En effet, un pirate pourrait tout à fait se faire passer pour le serveur auquel le client souhaite se connecter, envoyer la clé publique au client, et récupérer des informations sensible sur ce dernier. Le mécanisme de cryptage par clé publique ne permet pas au client de s’assurer qu’il dialogue bien avec le bon serveur. Dans le cryptage symétrique, les étapes d’échange de la clé publique entre le serveur et le client sont les suivantes : – Le serveur commence par envoyer un certificat au client qui fait la demande de communication, ce certificat contient la clé publique du serveur, l’émetteur du certificat, et la durée de validité du certificat. – Le client doit ensuite accepter le certificat en fonction de son authenticité. Un certificat peut être considéré authentique à partir du moment où il est délivré par un organisme digne de confiance appelé autorité de certification (CA - Certificate Authorities), comme les sociétés VeriSign ou encore Thawte. Si le certificat n’est pas valide, le client en est averti, libre à lui de continuer ou d’arrêter le dialogue, à ses risques et périls. – À ce stade, les échanges entre le client et le serveur sont maintenant sécurisés par le mécanisme de cryptage à clé publique. La configuration du serveur peut, ou non, demander une authentification au client : les données d’authentification qui transitent sont cryptées. Le protocole HTTPS (HTTP over SSL) est une implémentation de HTTP sur le protocole SSL. Une autre implémentation de protocole sécurisé a également vu le jour, il s’agit de TLS (Transport Layer Security). C’est la version standardisée de SSL par l’IETF (Internet Engineering Task Force), l’organisation la plus importante en matière de standardisation des protocoles de l’Internet. TLS s’appuie sur la version 3.0 de SSL. En général, les serveurs d’applications Java EE peuvent utiliser SSL ou TLS pour sécuriser les flux HTTP.
© Editions ENI - All rights reserved
216