<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tomcat &#8211; erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/tag/tomcat/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sat, 13 Jun 2026 13:35:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.3</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>Tomcat &#8211; erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apps &#8211; Tomcat</title>
		<link>https://erwanguillemard.com/apps-tomcat/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 13:23:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3761</guid>

					<description><![CDATA[C&#8217;est marrant, je veux parler d&#8217;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&#8217;ai fait un article. Mais alors pourquoi faire un article sur Tomcat ? Parce que...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">C&rsquo;est marrant, je veux parler d&rsquo;une techno et voilà que je me retrouve à implémenter une serveur Tomcat. Je me dis « Nan mais ça va passer je vais pas faire un article&#8230; » Hé ba force est de constater que si, j&rsquo;ai fait un article.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais alors pourquoi faire un article sur Tomcat ?</strong></p>



<p class="wp-block-paragraph">Parce que premièrement cela aurait rendu l&rsquo;article indigeste déjà qu&rsquo;en temps normal ce n&rsquo;est pas ouf et que deuxièmement en creusant un peu le sujet cela ne se résume pas à juste un <strong><em>dnf install tomcat</em></strong>&#8230;</p>



<p class="wp-block-paragraph">Bref, ce billet sera technique car j&rsquo;ai hâte de revenir à mon article initial. Mais cela vaut le coup car j&rsquo;ai appris encore énormément de chose 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=r4OhIU-PmB8&amp;list=RDr4OhIU-PmB8&amp;start_radio=1">Tommy the Cat is my name and I say unto thee</a></p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">L&rsquo;étude de Tomcat vient simplement de l&rsquo;implémentation d&rsquo;un billet qui sera publié prochainement qui nécessite la présence d&rsquo;un serveur d&rsquo;applet Java. Je garde volontairement une part de mystère, sinon ce n&rsquo;est pas marrant non ? 🙂</p>



<p class="wp-block-paragraph">De mon passé, d&rsquo;étudiant, j&rsquo;ai appris la POO<sup data-fn="16da1029-699d-4bca-a6e9-7768a7099ca3" class="fn"><a href="#16da1029-699d-4bca-a6e9-7768a7099ca3" id="16da1029-699d-4bca-a6e9-7768a7099ca3-link">1</a></sup> lors de mes études en BTS<sup data-fn="8fe03776-25cc-4570-88c0-2c285e68ced0" class="fn"><a href="#8fe03776-25cc-4570-88c0-2c285e68ced0" id="8fe03776-25cc-4570-88c0-2c285e68ced0-link">2</a></sup> d&rsquo;info industrielle sur C++. J&rsquo;avoue que je n&rsquo;ai pas bien saisie la pratique&#8230; C&rsquo;est lors de ma licence en sécu logicielle que j&rsquo;ai unlock et appliqué tous les pratiques de la POO sur le langage JAVA.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Cool ta life mon gars, ça aurait mérité un post Facebook en 2012 avec en premier commentaire « Ba moi hier j&rsquo;ai mangé une pomme »</em></strong></p>



<p class="wp-block-paragraph">Ouai peut-être mais cela a été pour moi une révélation. J&rsquo;ai trouvé ce langage magnifique et je pensais avoir trouvé ma voie. Et pourtant JAVA est loin d&rsquo;être un langage des plus fiable et ergonomique. Des IDEs<sup data-fn="6b0bb7de-b295-4951-b60c-c2f13e9cfca2" class="fn"><a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2" id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link">3</a></sup> NetBeans, Eclipse, Android Studio sans oublier le serveur d&rsquo;applet web GlassFish je trouvais ça top. Et puis je me suis rendu compte que les applets c&rsquo;étaient lourds, les applications Java difficilement ergonomique, des failles de sécurités qui doivent être patché avec des updates de la JDK<sup data-fn="af7fd030-5eb8-459c-b326-4cfe6ebc218e" class="fn"><a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e" id="af7fd030-5eb8-459c-b326-4cfe6ebc218e-link">4</a></sup> côté développeur de la JVM<sup data-fn="2c0f76eb-2466-4e3d-a508-12ed484fb0c7" class="fn"><a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7" id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link">5</a></sup>, JRE<sup data-fn="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" class="fn"><a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec" id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link">6</a></sup> côté client, le code qui ne devient plus compatible&#8230;</p>



<p class="wp-block-paragraph">Voilà, les raisons de pourquoi j&rsquo;ai délaissé mon amour de JAVA par dépit à la suite de ces frustrations. L&rsquo;une des autres raisons et la difficulté de jongler entre la sécurité des versions clients et les progicielles. Accepter de mettre à jour et ne plus travailler car au lancement de l&rsquo;application ou de fonctionnalité ça crash ou retourne des erreurs de stack traces dans tous les sens ou accepter d&rsquo;avoir des failles de sécurité partout et pouvoir travailler ? </p>



<p class="wp-block-paragraph">Bref, encore une fois, un article pour installer un service au premier abord simple mais qui nécessite d&rsquo;être bien sécurisé.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.4 et versions ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Tomcat 10.1.54</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Hardenned Linux</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<h3 class="wp-block-heading">Un peu d&rsquo;histoire</h3>



<p class="wp-block-paragraph"><em>Il était une fois, un meunier ne laissa pour tous biens, à trois enfants qu&rsquo;il avait, que son moulin, son âne et son chat.</em>.. </p>



<p class="wp-block-paragraph">Bien joué Charles 😉 Je ne vais pas vous compter le conte du Chat Botté de Perrault mais bien celle de Tomcat, je vous rassure, mais la tentation était trop grande &lt;3</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;objectif principal était de fournir une implémentation de référence pour JAVA Web (servlets et JSP<sup data-fn="5aa72831-364a-4813-a223-8651ecf90bfd" class="fn"><a href="#5aa72831-364a-4813-a223-8651ecf90bfd" id="5aa72831-364a-4813-a223-8651ecf90bfd-link">7</a></sup>). C&rsquo;est ainsi que James Duncan DAVIDSON créa Tomcat en 1998 sans lui donner encore de nom.<br><br>Le projet sera donné à la fondation Apache en 1999 qui le baptisera Tomcat et passera ce dernier sous licence OpenSource Apache.<br><br>Au cours des années 1999 à 2001, la première version stable de Tomcat est disponible pour principalement être utilisé comme moteur de servlet et est fortement lié au server web Apache.<br><br>Au fil des années, le projet Tomcat continuera d&rsquo;évoluer avec l&rsquo;âge d&rsquo;or d&rsquo;internet. A ce jour, la version la plus récente est la version 11 qui comme nous pouvons en douter à une optimisation pour le cloud et les micro services. (Il faut bien vivre avec son temps 🙂 ).<br></td><td class="has-text-align-center" data-align="center"><img fetchpriority="high" decoding="async" width="550" height="679" class="wp-image-3804" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font.jpg 735w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_001_font-243x300.jpg 243w" sizes="(max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ce qu&rsquo;il est important de retenir, c&rsquo;est que ce dernier reste un projet OpenSource maintenu par une communauté très active. Tomcat reste également un serveur d&rsquo;application léger très populaire et de base (et c&rsquo;est pourquoi il est fortement lié à JAVA) la référence de l&rsquo;implémentation JAVA.</p>



<h3 class="wp-block-heading">Structure</h3>



<p class="wp-block-paragraph">Il est important comme pour toutes applications de savoir comment cette dernière est structurée et comment elle fonctionne.</p>



<p class="wp-block-paragraph">Ainsi, nous pouvons différencier 9 répertoires distincts au sein du daemon Tomcat :</p>



<ul class="wp-block-list">
<li><strong>bin :</strong> L&rsquo;ensemble des scripts et exécutables propre au daemon pour démarrer ou arrêter le serveur.</li>



<li><strong>common :</strong> Nous pourrions dire que ce répertoire contient le code (classes et méthodes) commun utilisé par le service Catalina et certaines applications web.</li>



<li><strong>conf :</strong> Le répertoire qui stocke les fichiers de configuration du server.</li>



<li><strong>lib :</strong> Répertoire qui stocke l&rsquo;ensembles des bibliothèques (les .jar)</li>



<li><strong>logs :</strong> Dossier qui va stocker l&rsquo;ensemble des journaux d&rsquo;événement. Attention à ce que ce dernier ne prenne pas trop de place sinon BOUM plus de service. Le mieux serait de le déplacer sur un disque dédié.</li>



<li><strong>server :</strong> Code contenant les méthodes et classes systèmes utilisés uniquement de Catalina.</li>



<li><strong>shared :</strong> Les classes partagées utilisées par toutes les applications</li>



<li><strong>webapps :</strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong>work :</strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache)</li>
</ul>



<p class="wp-block-paragraph">Chacun des répertoires joue un rôle clé et donc selon le contexte doit être sécurisé.</p>



<h3 class="wp-block-heading">Fonctionnement</h3>



<p class="wp-block-paragraph">Le fonctionnement de Tomcat peut paraitre complexe au premier abord. Toutefois avec un bon schéma, cela devient aussi divin que les croquettes Ultima Saumon pour chat stérilisé (« <em><strong>Sale Histoire</strong></em> » que mon avocat garde sous silence en reprenant la citation d&rsquo;un membre de la famille).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="873" height="449" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg" alt="" class="wp-image-3809" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce.jpg 873w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_lifecylce-768x395.jpg 768w" sizes="(max-width: 873px) 100vw, 873px" /></figure>
</div>


<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3761_7231f1-be kt-accordion-has-5-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3761_d60c16-59"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 1 : Le connecteur</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;utilisateur exécute une requête <strong>HTTP</strong><sup data-fn="49aa99e2-1a30-4956-b8aa-08bef6ca1b65" class="fn"><a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65" id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link">8</a></sup>, cette même requête se présente au connecteur sur le port <strong>8080</strong>. Le connecteur va alors transformer la requête en objets JAVA, deux pour être précis :</p>



<ul class="wp-block-list">
<li>Les données entrantes : <strong>HttpServletRequest</strong></li>



<li>Les données sortantes : <strong>HttpServletResponse</strong></li>
</ul>



<p class="wp-block-paragraph">Les données sortantes sont vides et seront complétées à la fin du traitement de la requête d&rsquo;entrée.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3761_1ceabd-49"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 2 : L&rsquo;engin Catalina</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Les données d&rsquo;entrées sont soumises au moteur de décision de son petit nom <strong>Catalina</strong>. Il va analyser l&rsquo;en-tête de la requête (header) pour orienter cette dernière vers le bon host virtuel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3761_31c3e0-db"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 3 : Host &amp; Context</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Un peu comme la tour de contrôle, nous pouvons voir ce dernier comme un aiguillage. Ainsi, si nous avions plusieurs domaines, le host va identifier le bon domaine et aiguiller le flux vers l&rsquo;application, le context.</p>



<p class="wp-block-paragraph">C&rsquo;est l&rsquo;application web spécifique (le .war) qui va alors traiter la demande. Nous pouvons donc avoir une multitude d&rsquo;application sur le même serveur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3761_039b51-8c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 4 : L&rsquo;Exécution</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le <strong>wrapper </strong>va appeler notre <strong>servlet </strong>correspondant. Tomcat charge alors la <strong>classe </strong>JAVA, l&rsquo;instancie et appelle la méthode <strong>Service()</strong>, <strong>doGet()</strong> ou <strong>doPost()</strong>.</p>



<p class="wp-block-paragraph">Le code va alors s&rsquo;exécuter et retourner la réponse dans l&rsquo;objet en attente, <strong>HttpServletResponse </strong>dissocier de la requête à l&rsquo;étape 1.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3761_13b9e2-6d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Phase 5 : La Réponse</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Tomcat récupère l&rsquo;objet réponse et va alors transformer cette dernière en flux de données HTTP (texte, HTLM, JSON) et renvoyer par le biais du connecteur la réponse au navigateur du client.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention :</strong></span> Cette architecture reste valable, mais Tomcat 10 a migré vers <strong>Jakarta EE</strong> en rendant incompatible les applications basées sur <strong>javax.servlet</strong>. Donc si usage des Servlets c&rsquo;est Tomcat 9&#8230;</p>



<p class="wp-block-paragraph">Pour faire simple, si lors du lancement de votre application ne se lance pas et que dans les logs localhost ou catalina vient fleurir l&rsquo;erreur <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong><em><span style="text-decoration: underline;">ClassNotFoundException: javax.servlet</span></em></strong></mark></code>, et bien c&rsquo;est que vous l&rsquo;avez dans l&rsquo;OS bien profond et que vous êtes marron&#8230; Votre application n&rsquo;est pas compatible Tomcat 10. Vous êtes bon pour un downgrade &lt;3 Ca fait du bien de temps en temps de se prendre un bon coup de nerf de bœuf sur l&rsquo;arrière train, ça fait circuler le sang !</p>



<p class="wp-block-paragraph">Cette structure modulaire d&rsquo;encapsulation, permet de garantir une certaine souplesse sans avoir à changer la logique des applications.</p>



<p class="wp-block-paragraph">Je pense qu&rsquo;il n&rsquo;y a pas besoin d&rsquo;en savoir plus pour installer le service sur notre serveur. Passe à la pratique.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p class="wp-block-paragraph">J&rsquo;ai pris le parti de sortir pour une nouvelle fois des sentiers battu et de ne pas me limiter à l&rsquo;installation de Tomcat depuis le repo source. J&rsquo;ai choisi de déployer ce dernier depuis le site officiel.</p>



<p class="wp-block-paragraph">Ce choix est motivé par les versions spécifiques nécessaire à certaines applications. De ce fait, l&rsquo;installation depuis le repo n&rsquo;est pas d&rsquo;une grande utilité. Et une nouvelle fois de par mon expérience, il est plus probable de passer par le site officiel.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p class="wp-block-paragraph">En termes de dépendance, ce n&rsquo;est pas bien compliqué, il nous faut la JDK pour faire tourner notre serveur Tomcat. Donc ?</p>



<p class="wp-block-paragraph">On installe la JDK 🙂</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-32b4d5e811eec91de227120c6db4eea5"><code><strong>#Install Java
$ sudo dnf install java-21-openjdk-headless</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="940" height="656" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg" alt="" class="wp-image-3785" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-300x209.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_100_install-768x536.jpg 768w" sizes="(max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Je passe encore et toujours mon tour sur cette étape qui devient un incontournable des billets que je rédige sous GNU/Linux.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Bien. Maintenant que notre dépendance est installée, commençons par le début.</p>



<p class="wp-block-paragraph">Créons notre groupe <strong>tomcat </strong>et notre utilisateur de service <strong>tomcat</strong>. Pour répondre au bonne pratique, un service = un compte applicatif. Cela permet de faciliter le debug et surtout en termes de sécurité c&rsquo;est bien mieux que de tout faire tourner avec le compte root.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7499e47f8ba19d1758af712566b877cd"><code><strong>$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat</strong></code></pre>



<p class="wp-block-paragraph">Naturellement, l&rsquo;utilisateur tomcat est membre du groupe tomcat&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="42" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg" alt="" class="wp-image-3784" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-300x13.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_101_groupserviceaccount-768x34.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;installation se fait de deux manières. Soit par la commande <strong>curl </strong>qui est nativement présente sur notre SE<sup data-fn="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" class="fn"><a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c" id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link">9</a></sup>. Soit par <strong>wget </strong>qui devra être installé. Il conviendra d&rsquo;adapter l&rsquo;URL<sup data-fn="8d533817-d743-4f53-9f04-09b0d390cfa6" class="fn"><a href="#8d533817-d743-4f53-9f04-09b0d390cfa6" id="8d533817-d743-4f53-9f04-09b0d390cfa6-link">10</a></sup> selon la version recherchée. J&rsquo;ai décidé de télécharger le <strong>.tar.gz</strong> directement dans le répertoire <strong>/tmp</strong>.</p>



<p class="wp-block-paragraph">Créons-le répertoire <strong>/opt/tomcat</strong> puis décompressons notre archive stocké sous <strong>/tmp</strong> dans le répertoire fraichement créé.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-711b5bcc4260e8ac71a235702a987f5e"><code><strong>$ curl -L --output-dir /tmp -O  https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.54/bin/apache-tomcat-10.1.54.tar.gz
$ mkdir /opt/tomcat
$ tar -xf /tmp/apache-tomcat-10.1.54.tar.gz -C /opt/tomcat --strip-components=1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="216" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg" alt="" class="wp-image-3783" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-300x69.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_102_getTomcat-768x177.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p class="wp-block-paragraph">Bon, si on regarde du côté de l&rsquo;ANSSI<sup data-fn="d2695521-2349-42a7-b9d8-98daece4022d" class="fn"><a href="#d2695521-2349-42a7-b9d8-98daece4022d" id="d2695521-2349-42a7-b9d8-98daece4022d-link">11</a></sup>, ces derniers nous recommandent que notre compte de service tomcat ne doit pas propriétaire des binaires (exécutables). Pourquoi ? Admettons qu&rsquo;il y est compromission, le compte ne sera pas en possibilité de s&rsquo;altérer lui-même. Ainsi, nous pouvons voir une sorte de silotage.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-6189b1aa423587f0ef9d55b34c63e35a"><code><strong>$ sudo chgrp -R tomcat /opt/tomcat
$ sudo chmod -R g+r /opt/tomcat/conf
$ sudo chmod g+x /opt/tomcat/conf
$ sudo chown -R tomcat /opt/tomcat/{webapps,work,temp,logs}</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="942" height="532" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg" alt="" class="wp-image-3782" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions.jpg 942w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_103_permissions-768x434.jpg 768w" sizes="auto, (max-width: 942px) 100vw, 942px" /></figure>
</div>


<p class="wp-block-paragraph">Le groupe utilisateur <strong>tomcat </strong>a donc les droits de lecture et d&rsquo;exécution sur l&rsquo;ensemble des sous éléments du répertoire <strong>/opt/tomcat</strong>. L&rsquo;utilisateur <strong>tomcat </strong>sera propriétaire uniquement des sous répertoires et leurs contenus :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">webapps :</span></strong> Répertoire qui va contenir les applications web (le fichier .war)</li>



<li><strong><span style="text-decoration: underline;">work :</span></strong> Répertoire qui va contenir les répertoires et fichiers temporaires (le cache) persistant. C&rsquo;est à dire utiliser par les servlets.</li>



<li><strong><span style="text-decoration: underline;">temp :</span></strong> Le répertoire va stocker les fichiers à déplacer. Il joue le rôle de passe plat. Les fichiers qui viendraient à persister sont automatiquement supprimés à chaque redémarrage du service.</li>



<li><strong><span style="text-decoration: underline;">logs :</span></strong> Les journaux d&rsquo;événements, il faut bien que le service puisse écrire ce qui se passe non ?</li>
</ul>



<h3 class="wp-block-heading">Sécurité</h3>



<p class="wp-block-paragraph">Niveau sécurité, les actions vont se concentrer et se définir dans le fichier server.xml ainsi que dans le fichier web.xml.</p>



<p class="wp-block-paragraph">L&rsquo;objectif sera de se prémunir des attaques classiques MIM<sup data-fn="6ba62ef7-23e3-40d7-9103-43c42443f43d" class="fn"><a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d" id="6ba62ef7-23e3-40d7-9103-43c42443f43d-link">12</a></sup>, Clickjacking, XSS<sup data-fn="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" class="fn"><a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6" id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link">13</a></sup> et de masquer l&rsquo;identité de notre serveur le plus possible. Parce qu&rsquo;on ne dévoile pas tout le premier soir 😉</p>



<h4 class="wp-block-heading">Audit et divulgation d&rsquo;identité</h4>



<p class="wp-block-paragraph">Commençons par éditer le fichier server.xml.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7e5764e583769fa5a8b342eb6a84fc71"><code><strong>$ sudo vim /opt/tomcat/conf/server.xml</strong></code></pre>



<p class="wp-block-paragraph">Un truc qui pourrait être tout bête, appliquons le principe : </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Vivons heureux, Vivons cachés ! </em></strong></p>



<p class="wp-block-paragraph">C&rsquo;est à dire outre mon langage (car peu parle le Erwan première langue), masquons la version de notre serveur tomcat dans les trames d&rsquo;entêtes (le header&#8230;) HTTP. Ainsi il est possible de savoir que je suis un serveur tomcat, mais de connaitre ma version. 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Malinx le Lynx. D&rsquo;un autre côté c&rsquo;est Tomcat&#8230; Voilà voilà, il est content de sa vanne&#8230;</strong></p>



<p class="has-text-align-center wp-block-paragraph">Dans le connecteur HTTP, ajouter <strong>server= » « </strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="308" height="98" class="wp-image-3787" style="width: 308px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON.jpg 406w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_104_serverON-300x95.jpg 300w" sizes="auto, (max-width: 308px) 100vw, 308px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="235" class="wp-image-3788" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF.jpg 401w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_105_serverOFF-300x128.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Tiens, tu ajoutes un <strong>secure= »true »</strong>. C&rsquo;est cool, du coup tu forces les connexions chiffrées ? 🙂 Et bien pas du tout ! Je me suis fait k*n aussi. Je suis allé regarder la documentation pour mieux comprendre. Par défaut, secure est à false. Nos applications par le biais de notre server peuvent refuser de délivrer les cookies sensibles ou vouloir rediriger les utilisateurs vers le protocole HTTPS<sup data-fn="f00b61b2-171d-465a-96ff-80a705088787" class="fn"><a href="#f00b61b2-171d-465a-96ff-80a705088787" id="f00b61b2-171d-465a-96ff-80a705088787-link">14</a></sup>. Dans le meilleur des cas ça créé des lenteurs au pire c&rsquo;est l&rsquo;infinity loop&#8230; Alors que si nous le forçons à <strong>true</strong>, Tomcat va confirmer auprès de l&rsquo;application que la requête vient d&rsquo;un canal sécurisé (ce qui n&rsquo;est pas le cas. Où le vilain menteur !) même s&rsquo;il vient d&rsquo;un canal non sécurisé.</p>



<p class="wp-block-paragraph">De toute façon, nous allons passer par un reverse proxy <strong>nginx </strong>et en frontal nous aurons une publication avec une règle de proxy.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="378" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg" alt="" class="wp-image-3811" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce.jpg 756w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_lifecylce-300x150.jpg 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois cela ne suffit pas. Quand est-il des pages d&rsquo;erreurs ? En creusant un peu il va falloir fermer les valves&#8230; 🙂</p>



<p class="wp-block-paragraph">L&rsquo;objectif est de supprimer la mention « <strong>Apache Tomcat/&lt;version&gt;</strong> » dans les pages d&rsquo;erreurs ainsi que la description des erreurs (la <strong>stacktrace</strong>. Que de nostalgie&#8230;). L&rsquo;objectif est de donner le moins d&rsquo;information possible à un potentiel attaquant qui souhaiterai exploiter une CVE<sup data-fn="5523c1bf-ded6-4124-9e1d-b2fc579b24a2" class="fn"><a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2" id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link">15</a></sup> en relation avec la version de notre produit. L&rsquo;objectif est de rendre aveugle l&rsquo;attaquant le temps que les mécanismes en place ce déclenche ou nous alertes.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="875" height="441" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg" alt="" class="wp-image-3789" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve.jpg 875w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-300x151.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_107_Valve-768x387.jpg 768w" sizes="auto, (max-width: 875px) 100vw, 875px" /></figure>
</div>


<p class="wp-block-paragraph">Niveau Audit, nous pouvons également renforcer la verbosité si nous suivons les recommandations de l&rsquo;ANSSI.</p>



<pre class="wp-block-code"><code><strong>&lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b %D &amp;quot;%{User-Agent}i&amp;quot;" /></strong>
</code></pre>



<ul class="wp-block-list">
<li><strong>%h :</strong> l&rsquo;adresse IP distante</li>



<li><strong>%l :</strong> Identifiant logique</li>



<li><strong>%u : </strong>Utilisateur authentifié</li>



<li><strong>%t :</strong> horodatage</li>



<li><strong>%r :</strong> Ligne de requête (la méthode et l&rsquo;URL appelé)</li>



<li><strong>%s :</strong> Code de retour du protocole HTTP</li>



<li><strong>%b :</strong> Taille de la réponse en octet</li>



<li><strong>%D :</strong> Le temps de traitement en ms</li>



<li><strong>%i : </strong>Le User-Agent pour repérer les outils automatisés (nmap et autres) et surtout les navigateurs « chelou » comme diraient mes enfants&#8230;</li>
</ul>



<p class="wp-block-paragraph">Par exemple :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="937" height="69" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg" alt="" class="wp-image-3780" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit.jpg 937w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-300x22.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_112_audit-768x57.jpg 768w" sizes="auto, (max-width: 937px) 100vw, 937px" /></figure>
</div>


<p class="wp-block-paragraph"><span style="text-decoration: underline;"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark></strong></span> <strong><span style="text-decoration: underline;">Attention :</span> L&rsquo;activation de l&rsquo;audit n&rsquo;est pas anodine en termes d&rsquo;espace. Il faut penser à mettre en place une rotation des logs. Sinon&#8230; BOUM !!!</strong></p>



<p class="wp-block-paragraph">Toutes les applications par défaut, ça dégage ! Pourquoi garder les éléments de bases qui sont d&rsquo;autant plus des vecteurs d&rsquo;attaque et des points de vulnérabilité ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-196272e263a1bf83f8fd5b085b27a829"><code><strong>$ sudo rm -Rf /opt/tomcat/webapps/*</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="693" height="299" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg" alt="" class="wp-image-3781" style="aspect-ratio:2.31779257849667;width:535px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps.jpg 693w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_108_webapps-300x129.jpg 300w" sizes="auto, (max-width: 693px) 100vw, 693px" /></figure>
</div>


<p class="wp-block-paragraph">Un truc que je ne connaissais pas et que j&rsquo;ai trouvé en étudiant Tomcat, c&rsquo;est le cas de « Protection du Shutdown ». Au premier abord, je me suis demandé qu&rsquo;est-ce que c&rsquo;est que ce truc. Le paramètre <strong>shutdown</strong> est explicite. Et bien voyez-vous c&rsquo;est marrant, c&rsquo;est une commande qui permet d&rsquo;éteindre le daemon. Alors certes, par défaut il est sur le port <strong>8005/tcp</strong> et normalement accessible qu&rsquo;en local. Mais tapons shutdown et pouf ! Notre daemon il va à la niche.</p>



<p class="wp-block-paragraph">Donc, on change le port et pour le mot de passe on utilise le bon vieux <strong>Soleil123!</strong> . Vous m&rsquo;avez compris non ? 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="448" height="24" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg" alt="" class="wp-image-3792" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown.jpg 448w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown-300x16.jpg 300w" sizes="auto, (max-width: 448px) 100vw, 448px" /></figure>
</div>


<pre class="wp-block-code"><code><strong>&lt;Server port="-1" shutdown="y2Fxg@kLx4:If2L0_MD1Ccz"&gt;</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="592" height="25" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg" alt="" class="wp-image-3791" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1.jpg 592w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_109_shutdown_1-300x13.jpg 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></figure>
</div>


<h4 class="wp-block-heading">Prévention des attaques</h4>



<p class="wp-block-paragraph">Ouvrons le fichier web.xml.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-b5063060d8ebd8f035f96eb98ac26173"><code><strong>$ sudo vim /opt/tomcat/conf/web.xml</strong></code></pre>



<p class="wp-block-paragraph">A la fin de la section &lt;filter&gt;, ajoutons les lignes suivantes :</p>



<pre class="wp-block-code"><code>&lt;!-- Begin R-ONE Modification -->
        &lt;filter>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter&lt;/filter-class>
                &lt;async-supported>true&lt;/async-supported>

                &lt;init-param>
                        &lt;param-name>hstsMaxAgeSeconds&lt;/param-name>
                        &lt;param-value>31536000&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>antiClickJackingOption&lt;/param-name>
                        &lt;param-value>DENY&lt;/param-value>
                &lt;/init-param>

                &lt;init-param>
                        &lt;param-name>blockContentTypeSniffingEnabled&lt;/param-name>
                        &lt;param-value>true&lt;/param-value>
                &lt;/init-param>
        &lt;/filter>
&lt;!-- End Modification -->
</code></pre>



<p class="wp-block-paragraph">Parcourons en détails chaque ligne pour comprendre ce que nous sécurisons avec les filtres. (Normal c&rsquo;est du café de Java&#8230; Franchement, il ne mérite pas d&rsquo;aller jouer sur l&rsquo;autoroute à contre sens pour bien voir le danger ? L&rsquo;auteur de ce billet est bof, il fait triste à voir.)</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>L&rsquo;usage du filtre de sécurité « <strong>HttpHeaderSecurityFilter</strong> » permet d&rsquo;ajouter des réponses dans le header des requetes HTTP pour protéger les utilisateurs et les applications des attaques mentionnées ci haut.<br><br>Ainsi pour une défense en profondeur l&rsquo;activation de ces options sont primordiales.<br><br><strong>hstsMaxAgeSeconds</strong> indique que le site ne peut être consulté uniquement via le protocole HTTPS et force ainsi le navigateur à chiffrer les requêtes. Cela permet donc de prévenir des attaques d&rsquo;interception SSL (SSL stripping).<br><br><strong>antiClickJackingOption</strong> aussi connu sous le nom de X-Frame-Options. Cela permet au site de ne pas intégrer l&rsquo;application dans une balise html iframe et donc de faire une superposition d&rsquo;interface invisible et valider une action non voulue.<br><br><strong>blockContentTypeSniffingEnabled</strong> ou X-Content-Type-Options: nosniff permet <s>de blague censurée</s> de forcer le navigateur à respecter le type MIME envoyé par le serveur. L&rsquo;objectif et de se prémunir des attaques XSS.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="283" class="wp-image-3793" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter.jpg 943w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_114_filter-768x395.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="109" class="wp-image-3794" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping.jpg 683w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_filter-mapping-300x59.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Il nous reste un dernier point, les cookies. Afin que ces derniers ne soient pas volés par Cookie Monster par exemple, il est primordial d&rsquo;interdire l&rsquo;accès au cookie via JavaScript (d&rsquo;où la présence du <strong>http-only</strong> à <strong>true</strong>. Nous bloquons ainsi le vol de session via XSS. L&rsquo;usage de <strong>secure</strong> va faire en sorte que le cookie n&rsquo;est envoyé si et seulement si la connexion est sécurisée.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code"><code><strong>&lt;!-- Modification R-ONE -->
        &lt;filter-mapping>
                &lt;filter-name>httpHeaderSecurity&lt;/filter-name>
                &lt;url-pattern>/*&lt;/url-pattern>
        &lt;/filter-mapping>
&lt;!-- End Modification --></strong></code></pre>



<p class="wp-block-paragraph">Un truc c*n qui m&rsquo;a fait perdre une nuit de sommeil. J&rsquo;avais cette put**n d&rsquo;erreur&#8230; A devenir fou !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="409" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg" alt="" class="wp-image-3822" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error.jpg 409w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_115_Error-300x96.jpg 300w" sizes="auto, (max-width: 409px) 100vw, 409px" /></figure>
</div>


<p class="wp-block-paragraph">Après pas mal de recherche, c&rsquo;est un truc simple. Franchement je suis vraiment un c*n&#8230; Mon nouveau fichier de conf, avait pour owner<strong> root:root</strong> et non <strong>tomcat:tomcat</strong>. La haine, vraiment. Pensez donc à bien set de nouveau les bons droits&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="640" height="360" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_002_font.gif" alt="" class="wp-image-3834" style="width:505px;height:auto"/></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-136681e0bd436974f8c5796c933db4b1"><code><strong>$ sudo chown tomcat:tomcat -R /opt/tomcat/conf/</strong></code></pre>



<p class="wp-block-paragraph">Un petit test avant, après ?</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Avant</mark></strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Après</mark></strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="161" class="wp-image-3823" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_0_securityOff-300x88.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="213" class="wp-image-3824" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_118_1_securityOn-300x116.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Daemon Firewall</h4>



<p class="wp-block-paragraph">Côté firewall il faut publier le port <strong>8080/tcp</strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-978fdf9ca02b827f822fe1ce1d7cf8c7"><code><strong>$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="814" height="86" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg" alt="" class="wp-image-3796" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall.jpg 814w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-300x32.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_110_firewall-768x81.jpg 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois ça ne fonctionnera pas NANANANERE ! Et pourquoi ? Hein, pourquoi ? A cause du SELinux ventrebleu !</p>



<p class="wp-block-paragraph">Par défaut le port 8080 n&rsquo;est pas autorisé dans le SELinux pour la communication HTTP. Il est donc nécessaire de lui dire qu&rsquo;il en fait partie.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-332047db95ba0287e909010a861a8529"><code><strong>$ sudo semanage port -a -t http_port_t -p tcp 8080</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="800" height="41" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage.jpg" alt="" class="wp-image-3797" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage.jpg 800w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage-300x15.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_111_semanage-768x39.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>
</div>


<h3 class="wp-block-heading">Configuration</h3>



<h4 class="wp-block-heading">Logrotate</h4>



<p class="wp-block-paragraph">Créons et éditons le fichier de rotation propre à <strong>tomcat </strong>sous <strong>/etc/logrotate.d</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8c355ba62d50ec603953ecad6546d494"><code><strong>$ sudo vim /etc/logrotate.d/tomcat</strong></code></pre>



<p class="wp-block-paragraph">Nous allons spécifier dans notre fichier que nous souhaitons effectuer la rotation du fichier <strong>catalina.out</strong>, les fichiers <strong>localhost_access_log*.txt</strong> ainsi que l&rsquo;ensemble des fichiers d&rsquo;extensions .log.</p>



<p class="wp-block-paragraph">C&rsquo;est dernier afin de ne pas impacter la production seront vidé à chaud (<strong>copytruncate</strong>) de manière journalière en gardant 30 jours de rétention (histoire de faciliter les investigations en cas de suspicion). Nous compresserons les points de rétentions si pas de fichier nous ne faisons rien ni si les fichiers sont vides. Nous recréerons les fichiers avec les droits <strong>0640</strong> avec en groupe et propriétaire le compte de service <strong>tomcat</strong>.</p>



<pre class="wp-block-code"><code>/opt/tomcat/logs/catalina.out
/opt/tomcat/logs/localhost_access_log*.txt
/opt/tomcat/logs/*.log {
    copytruncate
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 0640 tomcat tomcat
}</code></pre>



<p class="wp-block-paragraph">Une commande que je ne connaissais pas. C&rsquo;est en me replongeant dans la documentation de logrotate que j&rsquo;ai découvert qu&rsquo;il existait un mode debug qui vient simuler notre fichier de rotation. C&rsquo;est vraiment cool.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-58b5ba50e3c5914e439bcc75abb938af"><code><strong>$ sudo logrotate -d /etc/logrotate.d/tomcat</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="904" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg" alt="" class="wp-image-3778" style="aspect-ratio:1.037616803769667;width:557px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-300x289.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_0-768x740.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Bon ba fonctionne pas. Que pasa ? Ca ne serait pas encore un coup du SELinux ? Mais si, Mais si j&rsquo;ai cru voir un SELinux !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-890a6cc4c898e3d7491ddf1ece970143"><code><strong>$ ls -Zd /opt/tomcat/logs</strong>
<strong>$ sudo semanage fcontext -a -t var_log_t "/opt/tomcat/logs(/.*)?"
$ sudo restorecon -Rv /opt/tomcat/logs</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="317" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg" alt="" class="wp-image-3779" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-300x101.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_117_logrotate_1-768x260.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Après vérification du contexte de sécurité, il s&rsquo;avère que <strong>logrotate </strong>est bloqué par le SELinux lorsqu&rsquo;il essai d&rsquo;écrire dans le répertoire <strong>/opt/tomcat/logs</strong>. Il convient donc alors d&rsquo;ajouter le contexte et de restaurer le contexte de sécurité sur le répertoire <strong>/opt/tomcat/logs</strong>. 🙂</p>



<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong><em>Tu vois Monsieur CHAPPINION, je ne laisse pas la sécurité au hasard et des backdoors partout comme tu aimes le crier haut et fort en te pavanant. Continu de cracher ton VENIN avec ta clic&#8230; #bisous #gratuit #faitdubien 🙂</em></strong></p>



<h4 class="wp-block-heading">Services</h4>



<p class="wp-block-paragraph">Comme j&rsquo;ai choisi l&rsquo;installation depuis le package et non depuis le repo, il faut se farcir à la main le fichier de service. Cela dit, c&rsquo;est plutôt intéressant de se pencher sur le cas. Encore une fois et c&rsquo;est mon point de vue, c&rsquo;est agréable de savoir cuisiner que d&rsquo;acheter des produits transformés tous les jours.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7776c465df90f1fe7db107290a439292"><code><strong>$ sudo vim /etc/systemd/system/tomcat.service</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Unit]
Description=Apache Tomcat Web Application Container
After=network.target

&#91;Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

# Sécurité Systemd (Sandboxing)
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true

&#91;Install]
WantedBy=multi-user.target</strong></code></pre>



<p class="wp-block-paragraph">Normalement maintenant c&rsquo;est le moment de vérité&#8230; Démarrons notre service. Si tout va bien, pas d&rsquo;erreur. Sinon c&rsquo;est parti pour du début et avec Java ça peut vite devenir pénible et encore le paroxysme est loin. Mais je ne veux pas vous décourager&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f8b20707246469b7d43923bc6211cc70"><code><strong>$ sudo systemctl start tomcat
$ sudo systemctl status tomcat</strong></code></pre>



<p class="wp-block-paragraph">Si c&rsquo;est ok, le service peut être actif au démarrage du système. Ce dernier se lancera après le service réseau (cf la conf du service).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-da1d9a84be95abfb9eb77293641ca1e2"><code><strong>$ systemctl enable tomcat</strong></code></pre>



<h2 class="wp-block-heading">Test</h2>



<p class="wp-block-paragraph">Pour vérifier que tout est fonctionnel, il est nécessaire comme nous avons supprimé l&rsquo;intégralité du contenu de notre répertoire <strong>/webapps/</strong> de générer un fichier de test :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-6813384eec985a71cbc7bf16f22fd65e"><code><strong>$ sudo mkdir /opt/tomcat/webapps/ROOT
$ sudo echo "OK FINAL ROOT" &gt; /opt/tomcat/webapps/ROOT/index.html
$ chown tomcat:tomcat -R /opt/tomcat/webapps/ROOT
$ sudo systemctl restart tomcat</strong></code></pre>



<p class="wp-block-paragraph">Maintenant depuis un navigateur web, sous réserve d&rsquo;avoir créé la règle sur votre UTM<sup data-fn="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" class="fn"><a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b" id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link">16</a></sup> si vous n&rsquo;êtes pas dans le même subnet rendez-vous sur l&rsquo;URL <strong>http://&lt;SERVER&gt;:8080</strong> ou depuis directement depuis votre server curl <strong>http://127.0.0.1:8080</strong> vous devriez avoir en retour :</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Remote</strong></td><td class="has-text-align-center" data-align="center"><strong>Local</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="222" class="wp-image-3825" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote.jpg 441w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_0_Remote-300x121.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="41" class="wp-image-3826" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote.jpg 621w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_119_1_Remote-300x22.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je pense que nous avons clôt ce billet. Nous voilà avec un server Tomcat sécurisé et fonctionnel&#8230; 🙂</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Je me suis arraché les cheveux sur ce billet.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Ecoute ma bonne Catalina, tu un engine modèle, mais si tu n&rsquo;as que des qualités et en termes de verbosité tu es resté comme je l&rsquo;espérai, c&rsquo;est le bonheur rangé dans une armoire. Tu vois si c&rsquo;était à refaire, je t&rsquo;installerai de nouveau mais tu m&#8217;emmerdes !</em></p>
<cite>Erwan Guillemard, revisite d&rsquo;<span style="text-decoration: underline;"><a href="https://www.youtube.com/watch?v=ZywHVw_WIaA">Un singe en hiver</a> d&rsquo;Henri VERNEUIL</span></cite></blockquote>



<p class="wp-block-paragraph">Mais alors pourquoi je tiens ces propos ? Je me suis une nouvelle fois aventuré dans la <strong>stacktrace </strong>et dans les logs à la suite d&rsquo;un <strong>404 Not Found</strong>. D&rsquo;erreur dans le fichier de configuration car sensible à la case sur UN caractère. L&rsquo;absence de log par moment&#8230; Tout ce que j&rsquo;aime avec JAVA, ou du moins j&rsquo;aimais&#8230; Imaginons maintenant une montée de version ? J&rsquo;espère que votre formulaire de CAB<sup data-fn="3aa5110f-a4b9-4a7d-afe0-234fc96d5687" class="fn"><a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687" id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link">17</a></sup> est à jour et que vous avez un environnement de production iso à votre production.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>JAVA et Tomcat c&rsquo;est un peu comme regardez notre bonne vieille boite de Schrödinger. Le service est démarré, mais cela ne fonctionne. Le chat, c&rsquo;est notre Tomcat numérique (C&rsquo;est surtout la faute du mec entre le clavier et la chaise qui est dans un état quantique oui !).</td><td><img loading="lazy" decoding="async" width="350" height="467" class="wp-image-3840" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-scaled.jpeg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-225x300.jpeg 225w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-768x1024.jpeg 768w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1152x1536.jpeg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_016_003_font-1536x2048.jpeg 1536w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://www.google.com/search?sca_esv=042d98b02a14ad67&amp;rlz=1C1VDKB_frFR1007FR1007&amp;sxsrf=ANbL-n5g0SGLR_FWDKmUlxRKrbUzg2m9Fw:1776192360032&amp;q=schrodinger&amp;si=AL3DRZHSpE0pse5fJpxwjTYaymAaGmMpRhbxpA7uMSemdL5dKZeVcKV4-oc58az3G7fIb7JrAUZtKhLoqaP4Xh3erRAOpS2vbpdBPWfMAVztgIr6WaS5Ss0%3D&amp;sa=X&amp;ved=2ahUKEwjDpLCVgO6TAxXPU6QEHTMgGXUQyNoBKAB6BAgeEAA&amp;ictx=1"></a>Enfin passons, si j&rsquo;ai fait un billet sur Tomcat, c&rsquo;est que je vais surtout en avoir besoin dans l&rsquo;article prochain et qu&rsquo;il était vraiment important d&rsquo;étudier en profondeur ce produit de la gamme Apache. Il faut reconnaitre tout de même qu&rsquo;en terme de serveur web il y a bien pire 🙂</p>



<p class="wp-block-paragraph">Rien que les notions de sécurité, nous revenons une nouvelle fois autour des mêmes notions conceptuelles, moindre privilège, réduction de la surface d&rsquo;attaque, audit, chiffrement et isolation. Ces points sont primordiaux pour Tomcat.</p>



<p class="wp-block-paragraph">Pourquoi me direz-vous ? Parce que nous publions un service Web qui exécute du code JAVA qui si mal isolé, croyez-moi peut faire énormément de dégât dans un système d&rsquo;information. Il serait bien de porter si vous utiliser ce dernier renforcer la vigilance sur ce dernier avec votre SIEM<sup data-fn="3d2466aa-4353-4408-a243-6def2b5bade4" class="fn"><a href="#3d2466aa-4353-4408-a243-6def2b5bade4" id="3d2466aa-4353-4408-a243-6def2b5bade4-link">18</a></sup> (c&rsquo;est marrant, je n&rsquo;en ai pas 🙂 )&#8230;</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Le chat botté chevauche Tomcat pendant que Charles Perrault configure du HSTS dans une cafetière. Arabica mon chers Watson, je danse la JAVA de Broadway. A non, il y a Catalina en travers sur une requête HTTP, le firewall vous fait chapeau bas !</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://messervices.cyber.gouv.fr/documents-guides/anssi-guide-recommandations_mise_en_oeuvre_site_web_maitriser_standards_securite_cote_navigateur-v2.0.pdf">ANSSI : Standards de sécurité côté navigateur</a></li>



<li><a href="https://linux.die.net/man/8/logrotate">Logrotate : Man</a></li>



<li><a href="https://linux.die.net/man/1/curl">Curl : Man</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Apache_Tomcat">Wikipédia : Apache Tomcat</a></li>



<li><a href="https://ipweb.univ-evry.fr/docs/">Tomcat : Documentation</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="16da1029-699d-4bca-a6e9-7768a7099ca3"><strong>POO :</strong> Programmation Orientée Objet <a href="#16da1029-699d-4bca-a6e9-7768a7099ca3-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8fe03776-25cc-4570-88c0-2c285e68ced0"><strong>BTS :</strong> Brevet de Technicien Supérieur <a href="#8fe03776-25cc-4570-88c0-2c285e68ced0-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="6b0bb7de-b295-4951-b60c-c2f13e9cfca2"><strong>IDE :</strong> Integrated Environment Development <a href="#6b0bb7de-b295-4951-b60c-c2f13e9cfca2-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="af7fd030-5eb8-459c-b326-4cfe6ebc218e"><strong>JDK :</strong> JAVA Development Tools <a href="#af7fd030-5eb8-459c-b326-4cfe6ebc218e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="2c0f76eb-2466-4e3d-a508-12ed484fb0c7"><strong>JVM :</strong> JAVA Virtual Machine <a href="#2c0f76eb-2466-4e3d-a508-12ed484fb0c7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="3767ce2d-4690-4d88-a81f-5a5abfb6e0ec"><strong>JRE :</strong> JAVA Runtime Environment <a href="#3767ce2d-4690-4d88-a81f-5a5abfb6e0ec-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="5aa72831-364a-4813-a223-8651ecf90bfd"><strong>JSP :</strong> JAVA Server Pages <a href="#5aa72831-364a-4813-a223-8651ecf90bfd-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="49aa99e2-1a30-4956-b8aa-08bef6ca1b65"><strong>HTTP :</strong> HyperText Transfert Protocol <a href="#49aa99e2-1a30-4956-b8aa-08bef6ca1b65-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c"><strong>SE </strong>: Système d&rsquo;Exploitation <a href="#7e0a7bd5-b44e-4bc9-acf0-b0b5d4e1385c-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="8d533817-d743-4f53-9f04-09b0d390cfa6"><strong>URL :</strong> Uniform Resource Locator <a href="#8d533817-d743-4f53-9f04-09b0d390cfa6-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2695521-2349-42a7-b9d8-98daece4022d"><strong>ANSSI :</strong> Agence National de Sécurité des Systèmes d&rsquo;Information <a href="#d2695521-2349-42a7-b9d8-98daece4022d-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="6ba62ef7-23e3-40d7-9103-43c42443f43d"><strong>MIM :</strong> Man In the Middle <a href="#6ba62ef7-23e3-40d7-9103-43c42443f43d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6"><strong>XSS :</strong> Cross Site Scripting <a href="#c7fe5ad0-6ab5-4d69-ae4a-8da0bea8e4b6-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="f00b61b2-171d-465a-96ff-80a705088787"><strong>HTTPS :</strong> Secure HyperText Transfert Protocol  <a href="#f00b61b2-171d-465a-96ff-80a705088787-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="5523c1bf-ded6-4124-9e1d-b2fc579b24a2"><strong>CVE :</strong> Common Vulnerabilities and Exposures <a href="#5523c1bf-ded6-4124-9e1d-b2fc579b24a2-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="51bcd054-ce7e-4f90-9836-c2d17c3c8b5b"><strong>UTM :</strong> Unified Threat Management  <a href="#51bcd054-ce7e-4f90-9836-c2d17c3c8b5b-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="3aa5110f-a4b9-4a7d-afe0-234fc96d5687"><strong>CAB :</strong> Change Advisory Board  <a href="#3aa5110f-a4b9-4a7d-afe0-234fc96d5687-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="3d2466aa-4353-4408-a243-6def2b5bade4"><strong>SIEM :</strong> Security Information and Event Management <a href="#3d2466aa-4353-4408-a243-6def2b5bade4-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
