Accès HTTPS avec Tomcat

Génération du certificat serveur

Il faut tout d’abord générer le certificat (= son identification pour le client). Celui-ci sera stocké dans le fichier ‘’/etc/tomcat/keystore’‘ (option ’‘-keystore’‘) avec pour alias ‘tomcat’ (option ‘’-alias’‘). On précise qu’on utilise l’algorithme RSA (option ’‘-keyalg’‘). L’outil utilisé, keytool, est fournis avec votre JDK et devrait se trouver dans votre PATH.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  # keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/tomcat/keystore
Tapez le mot de passe du Keystore :  changeit
Quels sont vos prénom et nom ?
  [Unknown] :  tomcat.drazzib.com
Quel est le nom de votre unité organisationnelle ?
  [Unknown] :  
Quelle est le nom de votre organisation ?
  [Unknown] :  DRAZZIB.COM
Quel est le nom de votre ville de résidence ?
  [Unknown] :  NANTES
Quel est le nom de votre état ou province ?
  [Unknown] :  LOIRE-ATLANTIQUE
Quel est le code de pays à deux lettres pour cette unité ?
  [Unknown] :  FR

Est-ce CN=tomcat.drazzib.com, OU=Unknown, O=DRAZZIB.COM, L=NANTES, ST=LOIRE-ATLANTIQUE, C=FR ?
  [non] :  oui
Spécifiez le mot de passe de la clé pour tomcat
(appuyez sur Entrée s'il s'agit du mot de passe du Keystore) : appuyez sur [ENTREE]

Intégrer le connecteur SSL à la configuration de Tomcat

Il faut ensuite modifier le fichier de configuration du serveur pour activer le serveur SSL, en indiquant le chemin de stockage du trousseau de clefs : /etc/tomcat/keystore

Fichier server.xml pour Tomcat 4.x
1
2
3
4
5
6
7
8
9
10
11
12
# Définition d'un nouvel écouteur sur le port 8443

<Connector className="org.apache.catalina.connector.http.HttpConnector"
           port="8443" minProcessors="5" maxProcessors="75"
           enableLookups="true"
           acceptCount="10" debug="0" scheme="https" secure="true">

    <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
           clientAuth="false" protocol="TLS"
           keystoreFile="/etc/tomcat/keystore" />

</Connector>
Fichier server.xml pour Tomcat 5.x
1
2
3
4
5
6
7
8
# Définition d'un nouvel écouteur sur le port 8443

<Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
           port="8443" minProcessors="5" maxProcessors="75"
           enableLookups="true" disableUploadTimeout="true"
           acceptCount="100" debug="0" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="/etc/tomcat/keystore" />

Rediriger le port 443 (HTTPS) vers le port 8443 de Tomcat

Sur la plupart des systèmes Unix, les ports dont le numéro est inférieur à 1024 ne peuvent être ouverts que par le super-utilisateur. Malheureusement le numéro de port pour le HTTPS est 443, il n’est donc pas possible de faire écouter Tomcat sur ce port dans la configuration standard (Tomcat fonctionne avec un utilisateur non root). Première solution, faire fonctionner Tomcat sous l’utilisateur root. Généralement, on considère que c’est une mauvaise politique de securité que de faire tourner un programme serveur en root quand ce n’est pas absolument nécessaire.

Une autre solution est de rediriger le port 443 vers le port de Tomcat, 8443, via le pare feu. Exemple sur un kernel 2.4/2.6 (avec netfilter) :

Fichier server.xml pour Tomcat 5.x
1
2
# iptables -A FORWARD -p tcp --destination-port 443 -j ACCEPT
# iptables -t nat -A PREROUTING -j REDIRECT -p tcp --destination-port 443 --to-ports 8443

Pour plus d’information