Configurer Tomcat avec SSL
Sommaire
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 :
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 :
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
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
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>) :
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é :
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".
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
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