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]
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" />
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