Skip to content

Tomcat SSL

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.

	  # 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

# 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>
# 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) :

	# 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