Configurer Tomcat avec SSL

I. Présentation

Dans ce tutoriel, nous allons sécuriser Tomcat en configurant la possibilité ou l'obligation de passer par du HTTPS plutôt que par du HTTP. Les échanges HTTPS sont chiffrés de sorte qu'ils ne soient plus lisibles si on ne dispose pas des bon certificats de déchiffrement.

Pour effectuer ce tutoriel, il faut que vous disposiez d'un Tomcat opérationnel. Je fait ce tutoriel avec la version 7 de Tomcat mais la procédure est la même depuis Tomcat 5. Son répertoire d'installation est dans mon cas "/opt/tomcat".

II. Génération du Keystore

Un Keystore est un fichier qui va comprendre la clé privée du serveur ainsi que le certificat auto-signé. Pour plus de clarté, il est plus simple de le stocké non loin du répertoire d'installation de Tomcat7. Pour le généré, on utilise la commande suivante :

keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/tomcat/keystore

Vous aurez alors à répondre à plusieurs questions afin de remplir votre Keystore :

Création keystore tomcat

III. Création du connecteur SSL

Maintenant que le Keystore est généré, il faut indiquer à Tomcat quel connecteur (port) utiliser pour communiquer via SSL. Par défaut, il s'agit du port 8443 mais il n'est pas activé. Nous allons donc aller dans notre fichier "conf/server.xml" pour modifier la configuration de notre Tomcat.

La configuration du connecteur SSL est déjà présente dans le fichier "conf/server.xml" , il faut dé-commenter son paragraphe (enlever-les) et y ajouter quelques informations :

Connecteur SSL

Bien entendu, il faudra modifier le champ "keystoreFile" selon l'endroit ou vous stockez votre keystore ainsi que le champ "keystorePass". Le port utilisé par défaut est donc ici "8443".

IV. Tester le SSL

Nous allons maintenant tenter de nous connecter à notre serveur Tomcat. On commence par le démarrer :

bin/startup.sh

Note : Tout problème sera signalé dans le fichier "logs/catalina.out".

Nous allons ensuite nous rendre sur notre Tomcat par navigateur : http://<ip_serveur>:8080

Tomcat HTTP

Nous voyons que nous avons accès en HTTP à notre serveur. Testons maintenant un accès HTTPS par le port standard (défini dans le fichier de configuration) : https://<ip_serveur>:8443

Tomcat HTTPS

Un avertissement quant au certificat auto-signé est fait (ce qui est normal) ce qui indique que la connexion en SSL est fonctionnelle.

V. Forcer le SSL

Nous voulons maintenant forcer la connexion en HTTPS et ne plus avoir la possibilité de nous connecter en HTTP simple. Il nous faut pour cela modifier le fichier "conf/web.xml" pour y ajouter ces lignes à la fin du fichier (juste avant </webapp>) :

tomcat6

On redémarrera ensuite notre serveur puis nous tenterons une connexion en HTTP par le port 8080. Nous serons alors redirigé automatiquement vers la même page en HTTPS.

Astuce : On peut aussi forcer le SSL uniquement pour une application web de notre Tomcat. Il faudra alors aller modifier le fichier "web.xml" de l'application (dans "tomcat/webpass/" et non pas celui du Tomcat. Chaque application doit avoir un fichier "web.xml".

  • Comment sommes-nous redirigé ?

L'ajout de ces lignes permet au serveur Tomcat de nous rediriger lorsque l'on arrive sur le port 8080. En réalité, dans la configuration du connecteur HTTP ( port 8080), il y a une option "redirectPort" qui indique ou rediriger les requêtes arrivant sur le port 8080 si une redirection a été configuré :

tomcat7

Pour que la redirection fonctionne, il faut bien entendu qu'un connecteur (port) soit configuré pour fonctionner aussi sur le port ou sont redirigées les requêtes. C'est notre cas ici puisque nous avons configuré le connecteur "8443".

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur en sécurité des systèmes d'information chez Amossys

mickael a publié 509 articlesVoir toutes les publications de cet auteur

2 thoughts on “Configurer Tomcat avec SSL

  • Bonjour.
    Merci beaucoup pour ce cours. Néanmoins j’ai quelques questions:

    1- Est-il nécessaire d’installer un certificat SSL avant la génération du fichier keystore?
    2- Pourquoi il faut créer et soumettre une demande de signature de certificat (CSR) auprès de l’autorité de certification (CA)?
    3- Faut-il un certificat par serveur tomcat?

    D’avance merci

    Répondre
    • Pour le ssl on a besoin d’un certificat (auto signé ou signé par un CA dans ce cas il faut envoyé un CSR au CA), vous pouvez utiliser openssl pour générer le CSR et la clé privé, le CSR contient la clé publique.
      non avec tomcat t’as pas besoin d’un certificat sauf si tu veux utiliser https(ssl) donc c’est uniquement pour sécuriser l’échange de la communication entre un client web et ton serveur

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.