====== Serveur Tomcat avec Apache2 et ssl ====== ====== Introduction ====== Si vous l'avez déjà installé (sinon, passez à la section [[tomcat|Tomcat]]), vous savez que Tomcat gère tout les requêtes http provenant du port 8180 (ou d'un autre de votre précédent choix). Il serait plus pratique de laisser apache gérer les requêtes http et que celui-ci délègue uniquement celles pour les Servlets et JSP à Tomcat. De plus, apache2 permettra de gérer la connexion sécurisée (https). Attention, le tuto ne mentionne pas comment réaliser ses vhosts. Il concerne uniquement la mise en place basique de ce mode de fonctionnement apache2-ssl/tomcat ! ====== Prérequis ====== * Un Lan (ici, en 192.168.0.0/24 ) * Un Pc/Mac client * Debian Etch (installation Minimale, ici en adresse 192.168.0.10) * [[tomcat|Tomcat]] Bien sûr, Tomcat, JDK et votre application (Servlet/JSP) Java fonctionne parfaitement sur le port 8180. On appellera votre application //votre_servlet//. Ce dernier est stocké dans ///usr/share/tomcat5.5-webapps// OU dans ///var/lib/tomcat5.5/webapps//. Pour le premier cas, il soit faire un lien vers le second répertoire, soit mentionner l'existence de votre servlets via un fichier xml à mettre dans ///usr/share/tomcat5.5/conf/Catalina/localhost// (ce n'est pas mentionné ici ...) Vous connaissez un minimum Apache2. Comme je l'ai mentionné plus haut, je donne uniquement les éléments permettant une config basique Apache2-SSL/Tomcat/Le_Servlet ... ====== Installation ====== Installez le serveur Apache2 ainsi que le nécessaire pour Tomcat : ''aptitude install apache2 libapache2-mod-jk'' Normalement, les modules ssl et jk sont fonctionnel, faites un : ''ls /etc/apache2/mods-enabled'' Vérifiez la présence de jk.load, ssl.conf et ssl.load Si il en manque, activer les modules JDK et SSL d'Apache2 : ''a2enmod ssl''\\ ''a2enmod jk'' ====== Configuration ====== ===== Apache2 seul ===== **Vérifier le fichier ///etc/default/apache2// :** La ligne doit être ''NO_START=0'' Et non //NO_START=1// **Modifier le fichier ///etc/apache2/ports.conf// et ajouter la ligne Pour le port d'écoute par défaut en mode ssl :** Listen 443 **Relancez apache2 :** ''/etc/init.d/apache2 restart'' **Testez votre serveur a l'adresse http://192.168.0.10 , ça devrait retourner un joli //It works!//.** ===== Mod jk Apache2 ===== **Créer un fichier ///etc/apache2/worker.properties// avec ceci dedans :** ''ps=/\\ worker.list=default\\ worker.default.port=8009\\ worker.default.host=127.0.0.1\\ worker.default.type=ajp13'' //port=8009// --> Le port par lequel Tomcat "communique" avec Apache2 //host=127.0.0.1// --> L'ip du serveur Tomcat **Editer le fichier ///etc/apache2/mods-avalaible/jk.load// en ajoutant ceci :** ''#\\ # Mod_jk settings\\ #\\ JkWorkersFile "/etc/apache2/worker.properties"\\ JkLogFile "/var/log/apache2/mod-jk.log"\\ JkLogLevel warning\\ JkMount /votre_servlet default\\ JkMount /votre_servlet/* default'' //JkWorkersFile "/etc/apache2/worker.properties"// -> le fichier créé plus haut\\ //JkLogFile "/var/log/apache2/mod-jk.log"// -> Le fichier log, vous pouvez le créer a l'endroit indiqué comme ça : ''touch /var/log/apache2/mod-jk.log && chmod 777 /var/log/apache2/mod-jk.log'' //JkMount /votre_servlet default//\\ //JkMount /votre_servlet/* default// C'est le répertoire de l'application votre Servlet ... (la racine ici c'est ///var/lib/tomcat5.5//). **Après un redémarrage de Tomcat5.5 et de Apache2, l'application devrait etre visible en allant sur http://192.168.0.10/votre_servlet** Ici, l'application passe par Apache ! ===== Vhost Apache2 pour Votre_Servlet ===== **Modifiez le fichier de configuration ///etc/apache2/sites-avalaible/default// pour le vhost et indiquez ceci :** ''NameVirtualHost *\\ \\ ServerAdmin admin@mon-domaine.org\\ #ServerName mon-servlet.mon-domaine.org\\ DocumentRoot /var/lib/tomcat5.5/\\ RedirectMatch ^/$ /votre_servlet/\\ ErrorLog /var/log/apache2/error.log\\ LogLevel warn\\ CustomLog /var/log/apache2/access.log combined\\ ServerSignature On\\ SetEnvIf User-Agent ".*MSIE.*" \\\ nokeepalive ssl-unclean-shutdown \\\ downgrade-1.0 force-response-1.0\\ '' **Testez a présent la même page après avoir relancé le serveur ...** http://192.168.0.10 Ici, l'application passe toujours par apache mais cette fois sans mentionner le dossier votre_servlet (voir le RedirectMatch). ====== Mode SSL ====== ===== Créez le répertoire ssl et générez la clef ===== **Allez dans le repertoire d'apache** ''cd /etc/apache2/'' **Créez le dossier ssl** ''mkdir ssl && cd ssl'' **Générez la clef** ''openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out server.crt -keyout server.key'' //-days 365// --> durée de la validité de la clef //rsa:1024// --> Cryptage en 1024 bits (je crois que ça ira ...) Remplissez le formulaire avec vos données correspondantes... ===== Retour sur la configuration de Apache2 ===== **Pour activer le mode ssl sur son vhost il faut ajouter une modification.** Ajouter ces trois lignes juste après //DocumentRoot /var/lib/tomcat5.5// : ''SSLEngine on\\ SSLCertificateFile /etc/apache2/ssl/server.crt\\ SSLCertificateKeyFile /etc/apache2/ssl/server.key'' ====== Test Final ====== **Relancez apache2 et testez la page https://192.168.0.10** Cette fois tout va bien : ça passe en ssl ! ====== Et maintenant ? ====== Si vous avez une seconde aplication (appellée pour l'exemple //votre_second_servlet//, contentez-vous d'ajouter dans le fichier ///etc/apache2/mods-avalaible/jk.load// à la suite : //JkMount /votre_second_servlet default//\\ //JkMount /votre_second_servlet/* default// Ensuite, plusieurs configurations sont possibles : * Il faudra par la suite soit ajouter un vhost pour apache * Ou supprimer la ligne //RedirectMatch ^/$ /votre_servlet//. Cela dit, il ne sera plus possible d'accéder aux deux servlets sans les indiquer en plus de l'url. Il faudra donc y accéder a ces adresses http://192.168.0.10/votre_servlet et http://192.168.0.10/votre_second_servlet * Enfin, vous pouvez très bien laisser le //RedirectMatch ^/$ /votre_servlet//. Dans ce cas votre_second_servlet sera accessible via http://192.168.0.10/votre_second_servlet et le premier via http://192.168.0.10 Cela dit, vous avez tout interêt a vous familiariser avec Apache2 car c'est pas finit pour lui...