DIAPASON 04.16
Breadcrumbs

Configuration HTTPS sur un tomcat 9.0.45 existant

Pré-requis

  •        Les services web et/ou tempo doivent être installés et fonctionnels en http.

  •        Avoir le mot de passe root

Généralités

  • Schéma général d’une connexion sécurisée

HTTPS.jpg

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.

Installation d’OpenSSL, du connecteur APR (apache portable runtime) et de la librairie Tomcat native

  • Ajout d’un connecteur APR OpenSSL Apache tomcat

Les tomcats installés jusque-là utilisaient le connecteur NIO et JSSE. Pour gérer au mieux les certificats et la sécurité nous allons utiliser des connecteurs APR/native tomcat et OpenSSL.

image-20230911-074320.png
Installation des paquets

Nous allons installer s’ils ne sont pas déjà présents les paquets OpenSSL, APR et GCC (pour compiler les librairies Native Tomcat)

  • Installation d’OpenSSL

Se connecter en root sur l’environnement.
Taper la commande suivante :

Bash
yum install openssl-devel
image-20230911-074742.png

Taper y et entrée

image-20230911-074853.png

OpenSSL est installé.


Installation du connecteur APR

Taper la commande suivante :

yum install apr-devel
image-20230911-081542.png

Taper y et entrée

image-20230911-081608.png

Taper ensuite :          

yum install apr-util 
image-20230911-081628.png

Taper y et entrée

image-20230911-081635.png

Le connecteur APR est installé.


Installation de GCC

Taper la commande suivante :      

yum install gcc
image-20230911-081849.png

Taper y et entrée. 

image-20230911-081930.png

GCC est installé.

 

Compilation des librairies Native Tomcat

Taper les commandes suivantes :

cd /Outils/apache-tomcat-9.0.45/bin
gunzip tomcat-native.tar.gz
tar -xvf tomcat-native.tar
image-20230911-082033.png
cd tomcat-native-1.2.27-src/native
./configure

La commande doit se terminer correctement sans erreur !

image-20230911-082204.png
make
make install

 Les commandes doivent se terminer ainsi :

image-20230911-082256.png

Il faut ensuite copier les librairies APR dans le dossier /usr/lib/

cp -r /usr/local/apr/lib/*.* /usr/lib/

Création de l’autorité de certification et du certificat (cas d’un certificat autosigné)

  • Fonctionnement d’une autorité de certification :

image-20230911-082443.png

Nous allons installer une autorité de certification sur le linux qui va signer le certificat pour le tomcat. Nous aurons ainsi une chaîne de certification acceptable par les navigateurs internet modernes.

Créer un répertoire où stocker les certificats et les clés. On va créer un répertoire nommé PKI dans le répertoire etc. Les clés privées sont des données sensibles, nous mettrons des droits restreints sur ce répertoire à la fin de la procédure. 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.

(Pour des raisons de sécurité nous mettons les certificats dans le répertoire /etc/PKI)

cd /etc
mkdir PKI
cd PKI


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. Il faut le renseigner immédiatement dans le keepass.

image-20230911-082713.png
Génération du certificat de l’autorité de certification :
openssl req -x509 -new -nodes -key vmsaplinuxCA.key -sha256 -days 30 -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. On met 1 mois par défaut. C’est ensuite au client de prendre en charge la gestion du certificat.

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 ELCIA ERP).

Important :

Pour un client entrer les informations du client, pas celles d’ELCIA ERP !

Pour le ‘common name’ entrer le nom du serveur !

On peut laisser l’adresse mail vide.

image-20230912-152922.png

Notre autorité de certification est créée, nous avons le certificat et la clé privée.

image-20230911-083049.png
Génération de la clé privée pour le tomcat (on ne crypte pas cette clé (-aes128) sinon le mot de passe de la clé est demandé à chaque démarrage du tomcat)
openssl genrsa -out vmsaplinux.key 2048
image-20230911-083140.png


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’ELCIA ERP !

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.

image-20230911-083244.png
Création du fichier .ext pour la signature du certificat

Créer un fichier demande.ext avec le contenu suivant (changer dans la dernière ligne vmsaplinux par le nom du serveur sur lequel vous êtes) :

vim demande.ext
image-20230911-084242.png
image-20230911-084254.png

En fonction de l’infrastructure informatique du client 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.elcia-2004.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.elcia-2004.local. On peut également rajouter l’IP. En cas de changement de ces éléments il faudra renouveler le certificat.

image-20230911-084427.png
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

openssl x509 -req -in vmsaplinux.csr -CA vmsaplinuxCA.pem -CAkey vmsaplinuxCA.key -CAcreateserial -out vmsaplinux.crt -days 30 -sha256 -extfile demande.ext

Il faut modifier les noms de certificats et de clés (en gras dans la commande) en fonction de ce que vous avez saisi dans les étapes précédentes.

-days 30 indique le nombre de jours de validité pour le certificat du tomcat. Comme pour la clé privée on met 1 mois par défaut. C’est ensuite au client de prendre en charge la gestion du certificat.

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 :

image-20230911-084459.png


Mise à jour de la configuration des certificats du linux

Copier les certificats (le certificat complet contenant la chaîne de certification) dans le répertoire contenant les autorités de certification du linux.

cp *.pem *.crt /etc/pki/ca-trust/source/anchors/
image-20231025-130046.png

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 ont accès

cd ..
chown -R diapdba:ISIA PKI
chmod -R 700 PKI


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
image-20230911-090906.png

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.

Copier le certificat et sa clé dans un répertoire sécurisé sur le serveur (par exemple dans le répertoire /etc/pki en s’assurant que le répertoire configuré en 700. Aller dans le répertoire /etc (ou celui que vous avez choisi) et taper les commandes suivantes :

cd ..
chown -R diapdba:ISIA 
chmod -R 700 PKI


Mettre à jour les certificats de racine du linux. Taper la commande suivante :

update-ca-trust


Paramétrage du tomcat

Éditer le fichier server.xml d’apache pour activer le https.

cd /Outils/apache-tomcat-9.0.45/conf


vim server.xml

Ajouter ce paragraphe :

<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443"
   maxThreads="200" maxParameterCount="1000" scheme="https" secure="true" SSLEnabled="true"
   SSLCertificateFile="/etc/PKI/vmsaplinux.crt"
   SSLCertificateKeyFile="/etc/PKI/vmsaplinux.key"
   SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />

Exemple de configuration avec un autre certificat :

image-20241029-102110.png


Important : les lignes SSLCertificateFile et SSLCertificateKeyFile sont à adapter en fonction de vos répertoires et noms de certificat et de clé !

J’ai utilisé le port 8443, vous pouvez en utiliser un autre (le 8444 par exemple) s’il est déjà utilisé. Modifier la première ligne (port="8443")

Pour vérifier si le port est utilisé taper la commande suivante :

netstat -anop | grep 8443     


Commenter ou supprimer le paragraphe ci-dessous pour interdire le port 8080.

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
   redirectPort="8443" />


Si on souhaite utiliser les 2 ports https :8443 et http :8080 il faut uniquement supprimer ou commenter la ligne redirectPort="8443"
On pourra alors se connecter au tomcat en https et http. Ceci n'est pas souhaitable, à faire uniquement en cas de problème important nécessitant de repasser en http.
Ce qui donne si on utilise le port 8443 pour le https :

<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443" maxThreads="200"
   maxParameterCount="1000" scheme="https" secure="true" SSLEnabled="true"
   SSLCertificateFile="/etc/PKI/vmsaplinux.crt"
   SSLCertificateKeyFile="/etc/PKI/vmsaplinux.key"
   SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" /> 

<Connector port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000" />


image-20230911-130805.png

Redémarrer le tomcat

/Outils/apache-tomcat-9.0.45/stoptomcat.sh
image-20230911-130830.png
/Outils/apache-tomcat-9.0.45/starttomcat.sh
image-20230911-130908.png

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. Par exemple pour un tomcat sur le serveur nommé s-i-tourmalet, dont le domaine sécurisé est isia.diapsw.fr et configuré sur le port 8443 voici l’url à tester :

https://s-i-tourmalet.isia.diapsw.fr:8443/

Le tomcat est bien en https, la chaine de certificat est correcte :

image-20241029-100649.png
  • 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.

 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.

image-20230911-085701.png

Faire un clic droit sur Autorités de certification racines de confiance, Toutes les tâches, Importer.

image-20230911-085816.png

Cliquer sur Suivant

image-20230911-085926.png

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.

image-20230911-090041.png

Cliquer sur Suivant

image-20230911-090111.png

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…)

image-20230911-120238.png

 

Cliquer sur Terminer

image-20230911-120313.png

 

Cliquer sur OK

image-20230911-120340.png

On peut maintenant tester notre tomcat sur chrome, edge ou brave :

image-20241029-100731.png


  • 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

image-20230911-090439.png

Cliquer sur Vie privée et sécurité

image-20230911-090452.png

 

 

Cliquer sur Afficher les certificats.

image-20230911-090459.png

Cliquer sur Importer

image-20230911-090512.png

Récupérer le bon certificat et cliquer sur Ouvrir

image-20230911-090522.png

Cocher Confirmer cette AC pour identifier des sites web et cliquer sur OK.

image-20230911-090554.png

Entrer l’URL du Tomcat en https. La connexion est sécurisée.

image-20241029-100806.png

Modification du diapason.ini

Editer le fichier diapason.ini de l’environnement.

Remplacer la ligne

DIAP_TOMCAT_URL_LOC http://nomduserveur:8080

DIAP_TOMCAT_URL_LOC   http://vmsaplinux:8080

par

DIAP_TOMCAT_URL_LOC https://nomduserveur:port

Exemple pour le port 8443 :

DIAP_TOMCAT_URL_LOC https://nomduserveur:8443

DIAP_TOMCAT_URL_LOC   https://vmsaplinux:8443

ou bien par exemple pour le port 8444 :

DIAP_TOMCAT_URL_LOC   https://vmsaplinux:8444

Lancer un ./diapadm A11

RAPPEL : Les ports de communication inférieurs à 1024 ne doivent pas être utilisés car réservés à l’utilisateur root. Pour le tomcat sur le serveur Linux on peut par exemple utiliser le port 8443 mais pas le 443.

Tempo

En cas de certificat autosigné il est nécessaire de l’importer sur le serveur tempo.

Récupérer le fichier correspondant au certificat de l’autorité de certification (dans notre exemple vmsaplinuxCA.pem) sur le serveur linux avec filezilla ou winscp et le copier sur le serveur Tempo.

Cliquer sur le bouton démarrer, taper certi et cliquer sur Gérer les certificats d’ordinateur. Vous devez avoir les droits administrateur du serveur.

image-20230911-085701.png

Faire un clic droit sur Autorités de certification racines de confiance, Toutes les tâches, Importer.

image-20230911-085816.png

Cliquer sur Suivant

image-20230911-085926.png

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.

image-20230911-090041.png

Cliquer sur Suivant

image-20230911-090111.png

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…)

image-20230911-120238.png

 

Cliquer sur Terminer

 

image-20230911-120313.png

Cliquer sur OK

image-20230911-120340.png

Il faut modifier le fichier appsettings.json et passer la chaine de connexion BaseURL en https.

Se connecter sur le serveur sur lequel Tempo est installé, aller dans le répertoire IIS (par défaut C:\inetpub\wwwroot\”repertoiretempo”). Pour l’environnement Formation par exemple, se connecter sur le serveur s-i-edt-form, aller dans le répertoire C:\inetpub\wwwroot\tempo-form.local, éditer le fichier appsettings.json et remplacer dans la chaine de connexion “BaseURL” “http” par “https”

image-20231006-080927.png


image-20230913-140159.png

Redémarrer le IIS pour être sûr que la modification soit prise en compte.

Chercher “IIS” dans le menu Démarrer et sélectionner Gestionnaire des services Internet (IIS)

image-20231009-074334.png

Déplier le navigateur à gauche jusqu'à ouvrir la section “Sites”

image-20231009-074430.png

Pour chaque site pointant vers la machine UNIX dont le Tomcat a été passé en HTTPS, la sélectionner et choisir “Redémarrer”.

image-20231009-074557.png


Troobleshooting

  • On a configuré un certificat acheté auprès d’un fournisseur du commerce, il est en cours de validité mais les navigateurs internets indiquent un problème au niveau de l’autorité de certification.

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. Voir sur le site du fournisseur du certificat pour les récupérer.


  • On a un problème de certificat que l’on arrive pas à résoudre en production, les services web et/ou tempo ne fonctionnent plus, il faut se remettre en http en urgence.

Éditer le fichier server.xml pour ré-activer le http sur le port 8080.

cd /Outils/apache-tomcat-9.0.45/conf
vim server.xml

Ajouter ce paragraphe :

<Connector port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000" />

Redémarrer le tomcat :

/Outils/apache-tomcat-9.0.45/stoptomcat.sh
image-20230911-130830.png
/Outils/apache-tomcat-9.0.45/starttomcat.sh
image-20230911-130908.png

Aller dans le diapason.ini et repasser l’url du tomcat en http : sur le port 8080 :

DIAP_TOMCAT_URL_LOC http://nomduserveur:8080

DIAP_TOMCAT_URL_LOC   http://vmsaplinux:8080

faire un ./diapadm A11

Pour tempo ne pas oublier de modifier le fichier appsettings.json et de repasser la chaine de connexion en http :

image-20230913-135608.png

Redémarrer le IIS pour être sûr que la modification soit prise en compte.