Création ou renouvellement d'un certificat SSL sur un tomcat 9.0.45
Pré-requis
Les services web et/ou tempo doivent être installés et fonctionnels.
Avoir le mot de passe root
Open SSL, la librairie tomcat native et le connecteur APR sont installés
ATTENTION : Les ports de communication inférieurs à 1024 ne doivent pas être utilisés car réservé à l’utilisateur root. Pour le tomcat sur le serveur Linux on peut par exemple utiliser le port 8443 mais pas le 443.
Généralités
Schéma général d’une connexion sécurisée
Création ou renouvellement de l’autorité de certification et du certificat en autosigné
Fonctionnement d’une autorité de certification :
Nous allons installer une autorité de certification sur le linux qui va signer le certificat pour le tomcat. Il y aura ainsi une chaîne de certification acceptable par les navigateurs internet modernes. Nous préconisons de mettre la même date d’expiration sur l’autorité de certification et le certificat du tomcat afin qu’il n’y ait pas d’ambiguïté sur le certificat à renouveler.
Aller dans le répertoire où sont stockés les certificats et les clés. Nous les installons généralement dans le répertoire ./devt/certificat de Diapason afin qu’ils soient inclus dans la sauvegarde. Les clés privées sont des données sensibles, des droits restreints sont nécessaire sur ce répertoire pour garantir la sécurité. Le nom du serveur que j’utilise ici dans les différents fichiers de configuration et captures d’écran est vmsaplinux et le répertoire d’installation est /Diap1/START41617/. A modifier en fonction de votre environnement.
cd /Diap1/START41617/devt/certificat
Le fichier demande.ext déjà présent dans ce répertoire peut vous être utile, ne le supprimez pas.
Génération de la clé privée de l’autorité de certification
openssl genrsa -aes128 -out vmsaplinuxCA.key
(remplacer vmsaplinux par le nom du serveur)
Choisir un mot de passe puis le confirmer. Vous devez garder ce mot de passe en lieu sur. Nous en aurons besoin par la suite.
Génération du certificat de l’autorité de certification :
openssl req -x509 -new -nodes -key vmsaplinuxCA.key -sha256 -days 90 -out vmsaplinuxCA.pem
vmsaplinuxCA.key représente la clé privée créée à l’étape précédente. Mettez le nom que vous avez choisi. Adaptez également vmsaplinuxCA.pem en fonction du nom du serveur.
-days 90 indique le nombre de jours de validité pour le certificat de l’autorité de certification. Choisissez la durée qui vous convient. Par défaut Isia créé un certificat valide 3 mois, vous pouvez ensuite choisir la durée qui vous convient.
Mettez-vous un avertissement à minima un mois avant la date de péremption pour le renouvellement.
Si vous avez déjà des certificats vous pouvez utiliser les mêmes noms, ils seront écrasés, et ainsi il n’y aura pas de modification à faire au niveau du fichier server.xml sur le tomcat.
Entrer le mot de passe de la clé privée, et répondre aux différentes questions avec vos informations (l’exemple ci-dessous correspond à un environnement interne Isia).
Important :
Renseigner vos informations, pas celles d’Isia.
Pour le ‘common name’ entrer le nom du serveur.
On peut laisser l’adresse mail vide. Elle ne sert pas.
Notre autorité de certification est créée, nous avons le certificat et la clé privée.
Génération de la clé privée pour le tomcat
openssl genrsa -out vmsaplinux.key 2048
Génération de la demande de certificat pour le tomcat
openssl req -new -key vmsaplinux.key -out vmsaplinux.csr
vmsaplinux.key représente la clé privée créée à l’étape précédente. Mettez le nom que vous avez choisi. Adaptez également vmsaplinux.csr en fonction du nom du serveur.
Entrer le mot de passe de la clé privée, et répondre aux différentes questions (l’exemple ci-dessous peut être utilisé pour un environnement interne Isia).
Important :
Pour un client entrer les informations du client, pas celles d’Isia !
Pour le ‘common name’ entrer le nom du serveur !
Ne pas entrer de mot de passe dans le champ « A challenge password »
On peut laisser l’adresse mail vide.
Création du fichier .ext pour la signature du certificat
Créer un fichier demande.ext (s’il n’existe pas déjà) avec le contenu suivant (changer dans la dernière ligne vmsaplinux par le nom du serveur sur lequel vous êtes) :
Si le fichier existe déjà et que les informations sont toujours bonnes vous pouvez le réutiliser.
vim demande.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = vmsaplinux
En fonction votre infrastructure informatique ce fichier peut être plus complexe. Si en mettant uniquement le nom de la machine on n’accède pas au tomcat c’est que cet ordinateur a un autre nom DNS ou une configuration particulière. On peut également rajouter l’IP. Voici le fichier pour le serveur ISIA srv-licences :
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = SRV-LICENCES
DNS.2 = SRV-LICENCES.domaine.local
DNS.3 = srv-licences
IP.1 = 192.9.250.26
Pour déterminer les différents éléments à rajouter dans le fichier j’ai fait un ping à partir d’une machine windows. On voit qu’il y a un nom DNS différent : srv-licences.domaine.local. On peut également rajouter l’IP. En cas de changement de ces éléments il faudra renouveler le certificat.
Signature du certificat du tomcat par notre autorité de certification
openssl x509 -req -in vmsaplinux.csr -CA vmsaplinuxCA.pem -CAkey vmsaplinuxCA.key -CAcreateserial -out vmsaplinux.crt -days 90 -sha256 -extfile demande.ext
Modifier les noms en fonction de vos fichiers. Entrer le mot de passe de la clé privée de l’autorité de certification quand c’est demandé.
Nous devons maintenant avoir tous ces fichiers dans le répertoire :
Mise à jour de la configuration des certificats du linux
Copier les certificats dans le répertoire contenant les autorités de certification du linux.
cp *.key *.pem *.crt /etc/pki/ca-trust/source/anchors/
Mettre à jour la configuration des certificats :
update-ca-trust
Sécurisation du répertoire et des clés
Les clés privées sont des données sensibles, nous devons nous assurer que les droits soient restreints.
Remonter d’un niveau, et s’assurer que seul l’utilisateur root (ou diapdba) y a accès.
cd ..
chown -R root:root certificat
chmod -R 700 certificat
Paramétrage du tomcat
Éditer le fichier server.xml d’apache pour mettre à jour les noms des certificats et des clés si besoin.
cd /Outils/apache-tomcat-9.0.45/conf
vim server.xml
Vérifier ce paragraphe :
Si vous avez repris les mêmes noms il n’y a rien à modifier. Sinon changez les noms de certificat et de clé.
<Connector
protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8443" maxThreads="200"
maxParameterCount="1000"
scheme="https" secure="true" SSLEnabled="true"
SSLCertificateFile="/Diap1/START41617/devt/certificat/vmsaplinux.crt"
SSLCertificateKeyFile="/Diap1/START41617/devt/certificat/vmsaplinux.key"
SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
Important : les lignes SSLCertificateFile et SSLCertificateKeyFile sont à adapter en fonction de vos répertoires et noms de certificat et de clé !
Redémarrer le tomcat
/Outils/apache-tomcat-9.0.45/stoptomcat.sh
/Outils/apache-tomcat-9.0.45/starttomcat.sh
Vérification du fonctionnement
Vérification directe sur le linux
Dans le cas (très rare) où on peut avoir un navigateur web sur le linux, accéder à l’URL du tomcat de votre serveur. Dans mon cas :
Dans cet exemple j’ai configuré le https sur le port 8443, il faut le spécifier dans l’URL. Si vous avez pris un autre port il faut l’indiquer dans l’URL. Par exemple pour le port 8444 : https://vmsaplinux:8444/
Voici un exemple avec un tomcat en https, la chaine de certificat est correcte :
Vérification sur une autre machine
Dans la plupart des cas nous n’avons pas de navigateur web sur le linux. Il faut alors vérifier le fonctionnement sur une machine windows, le TSE généralement. Il va être nécessaire d’importer le certificat de l’autorité de certification.
Attention cette procédure doit être suivie même si vous avez créé des certificats avec les mêmes noms que les anciens !
Première étape, récupérer le certificat de l’autorité de certification (dans mon cas vmsaplinuxCA.pem) avec filezilla ou winscp par exemple.
Sur Chrome, Edge ou encore Brave (pour firefox voir plus bas) :
Nous devons rajouter notre certificat dans les autorités de certification de l’ordinateur.
Cliquer sur le bouton démarrer, taper certi et cliquer sur Gérer les certificats d’ordinateur.
Faire un clic droit sur Autorités de certification racines de confiance, Toutes les tâches, Importer.
Cliquer sur Suivant
Cliquer sur Parcourir, aller dans le répertoire où vous avez copié le certificat. Dans la liste déroulante en bas à droite sélectionner Tous les fichiers. Sélectionner le certificat et cliquer sur Ouvrir.
Cliquer sur Suivant
Bien vérifier que le certificat est placé dans le magasin Autorités de certification racine de confiance (sinon modifier le magasin en cliquant sur Parcourir…)
Cliquer sur Terminer
Cliquer sur OK
On peut maintenant tester notre tomcat sur chrome, edge ou brave :
Installation du certificat de l’autorité de certification sur firefox
Firefox gère les certificats différemment. Si c’est le seul navigateur internet disponible voici les manipulations :
Lancer Firefox, cliquer sur le bouton en haut à droite puis sur Paramètres
Cliquer sur Vie privée et sécurité
Cliquer sur Afficher les certificats.
Cliquer sur Importer
Récupérer le bon certificat et cliquer sur Ouvrir
Cocher Confirmer cette AC pour identifier des sites web et cliquer sur OK.
Entrer l’URL du Tomcat en https. La connexion est sécurisée.
Installation d’un certificat acheté auprès d’un fournisseur
Le client a acheté un certificat pour son nom de domaine auprès d’un fournisseur du commerce.
Modifier le fichier /etc/hosts et rajouter le nom souhaité avec un des noms de domaine inclus dans le certificat. Dans l’exemple ci-dessous on configure le serveur srv-licences avec le certificat isia.fr
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.9.250.26 SRV-LICENCES srv-licences.isia.fr
Copier le certificat et sa clé dans un répertoire sécurisé sur le serveur (par exemple dans le répertoire ./devt/certificat en s’assurant que le répertoire certificat soit configuré en 700 et accessible uniquement à l’utilisateur root (ou diapdba). Aller dans le répertoire certificat (ou celui que vous avez choisi) et taper les commandes suivantes :
cd ..
chown -R root :root certificat
chmod -R 700 certificat
Le client doit faire le nécessaire au niveau de sa configuration DNS pour que le serveur soit accessible avec le bon nom de domaine.
Modifier le fichier server.xml (exemple avec le certificat et sa clé dans le répertoire /root)
<Connector
protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8443" maxThreads="200"
maxParameterCount="1000"
scheme="https" secure="true" SSLEnabled="true"
SSLCertificateFile="/root/STAR_isia_fr.crt"
SSLCertificateKeyFile="/root/new_private_2023.key"
SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
Mettre à jour les certificats de racine du linux. Taper la commande suivante :
update-ca-trust
Redémarrer le tomcat.
Le tomcat doit être immédiatement accessible en https.
Si ce n’est pas le cas il faut essayer de copier sur le linux dans le répertoire /etc/pki/ca-trust/source/anchors/ tous les certificats de la chaîne de certification (autorité racine de confiance et éventuellement autorité intermédiaire et refaire un update-ca-trust)
Modification du diapason.ini
Editer le fichier diapason.ini de l’environnement.
Remplacer la ligne
DIAP_TOMCAT_URL_LOC http://urlduserveur:8080
DIAP_TOMCAT_URL_LOC http://vmsaplinux:8080
par
DIAP_TOMCAT_URL_LOC https://urlduserveur:port
Il faut rajouter :numéroduport après le nom du serveur. Exemple pour le port 8443 :
DIAP_TOMCAT_URL_LOC https://urlduserveur:8443
DIAP_TOMCAT_URL_LOC https://vmsaplinux:8443