Skip to main content
Skip table of contents

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

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.

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

Taper y et entrée

OpenSSL est installé.

Installation du connecteur APR

Taper la commande suivante :

CODE
yum install apr-devel

Taper y et entrée

Taper ensuite :          

CODE
yum install apr-util 

Taper y et entrée

Le connecteur APR est installé.

Installation de GCC

Taper la commande suivante :      

CODE
yum install gcc

Taper y et entrée. 

GCC est installé.

 

Compilation des librairies Native Tomcat

Taper les commandes suivantes :

CODE
cd /Outils/apache-tomcat-9.0.45/bin
gunzip tomcat-native.tar.gz
tar -xvf tomcat-native.tar
CODE
cd tomcat-native-1.2.27-src/native
./configure

La commande doit se terminer correctement sans erreur !

CODE
make
make install

 Les commandes doivent se terminer ainsi :

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

CODE
cp /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 :

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)

CODE
cd /etc
mkdir PKI
cd PKI

Génération de la clé privée de l’autorité de certification
CODE
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.

Génération du certificat de l’autorité de certification :
CODE
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 Isia).

Important :

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

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

On peut laisser l’adresse mail vide.

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 (on ne crypte pas cette clé (-aes128) sinon le mot de passe de la clé est demandé à chaque démarrage du tomcat)
CODE
openssl genrsa -out vmsaplinux.key 2048

Génération de la demande de certificat pour le tomcat
CODE
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 avec le contenu suivant (changer dans la dernière ligne vmsaplinux par le nom du serveur sur lequel vous êtes) :

CODE
vim demande.ext

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 :

CODE
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.

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

CODE
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 :

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.

CODE
cp *.pem *.crt /etc/pki/ca-trust/source/anchors/

Mettre à jour la configuration des certificats :

CODE
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

CODE
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.

CODE
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

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 :

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

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

NONE
update-ca-trust

Paramétrage du tomcat

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

NONE
cd /Outils/apache-tomcat-9.0.45/conf

CODE
vim server.xml

Ajouter ce paragraphe :

CODE
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="443"
   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" />

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 443, vous pouvez en utiliser un autre (le 8443 en général) s’il est déjà utilisé. (3e ligne port="443" maxThreads="200" )

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

netstat -anop | grep 443     

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

CODE
<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 :

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

Redémarrer le tomcat

CODE
/Outils/apache-tomcat-9.0.45/stoptomcat.sh
CODE
/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 :

https://vm-saplinux/

Dans cet exemple j’ai configuré le https sur le port par défaut 443, je n’ai donc pas à le spécifier dans l’URL. Si vous avez pris un autre port il faut le spécifier dans l’URL. Par exemple pour le port 8443 : https://vmsaplinux:8443/

Le tomcat est bien 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.

 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.

 

Modification du diapason.ini

Editer le fichier diapason.ini de l’environnement.

Remplacer la ligne

DIAP_TOMCAT_URL_LOC http://nomduserveur:8080

CODE
DIAP_TOMCAT_URL_LOC   http://vmsaplinux:8080

par

DIAP_TOMCAT_URL_LOC https://nomduserveur:port

Exemple pour le port 443 :

DIAP_TOMCAT_URL_LOC https://nomduserveur:443

CODE
DIAP_TOMCAT_URL_LOC   https://vmsaplinux:443

ou bien par exemple pour le port 8443 :

CODE
DIAP_TOMCAT_URL_LOC   https://vmsaplinux:8443

Lancer un ./diapadm A11

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. VVous devez avoir les droits administrateur du serveur.

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

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”

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)

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

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

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.

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

Ajouter ce paragraphe :

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

Redémarrer le tomcat :

CODE
/Outils/apache-tomcat-9.0.45/stoptomcat.sh
CODE
/Outils/apache-tomcat-9.0.45/starttomcat.sh

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

DIAP_TOMCAT_URL_LOC http://nomduserveur:8080

CODE
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 :

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

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.