Skip to content

Docaposte_Signature électronique

csylvanie edited this page Jun 24, 2024 · 25 revisions

Tomcat certificats

Documentation d'aide à la configuration des certificats TLS gérés du process Java relatif à Esup-Stage.

Définitions

Java sépare le magasin de certificats à utiliser en 2 catégories :

  • keystore : magasin de certificats qui contient des clés privées d'authentification ou de sécurité
  • truststore : magasin de certificats qui contient les certificats publics qui sont acceptés

Ces 2 magasins sont stockés dans des fichiers de type JKS ou PKCS12

Edition de votre truststore

Les applications tomcat devront accepter certains certificats pour pouvoir accepter les appels web vers d'autres services de votre SI.

L'application Esup-Stage aura surement besoin de se connecter à votre serveur d'authentification SSO en HTTPS (certificat TLS), il faut donc rajouter la confiance de l'Autorité Certification (AC) qui émet les certificats de votre établissement dans le truststore dédié au tomcat.

Nous allons pour cela créer un fichier truststore avec la chaine de certificat de l'AC émettant les certificats de votre établissement

  • Récupérez le fichier ca.crt de l'AC de votre établissement

Pour l'exemple de création du truststore, nous avons pris le mot de passe 'my_password' mais ceci reste à votre libre choix.

  1. Découpez la chaîne des certificats publics contenu dans le fichier ca.crt**
[user@computer ~/tmp]$ csplit -s -z -f cacrt- ca.crt '/-----BEGIN CERTIFICATE-----/' '{*}'
[user@computer ~/tmp]$ ls -1
cacrt-00
cacrt-01
ca.crt
  1. Créez/Importez la série des certificats issus du ca.crt dans un nouveau truststore
[user@computer ~/tmp]$ ls -1 cacrt-* | while read item; do \
	echo "Import un certificat de la chaine de certification '${item}' :"; \
	keytool -keystore truststore.jks -storepass my_password \
		-alias ${item} -import -noprompt -file ${item}; \
  done
Import un certificat de la chaine de certification 'cacrt-00' :
Certificate was added to keystore
Import un certificat de la chaine de certification 'cacrt-01' :
Certificate was added to keystore
[user@computer ~/tmp]$
  1. Vérifiez le contenu du truststore
[user@computer ~/tmp]$ keytool -list -v -keystore truststore.jks -storepass my_password \
	| grep -C 5 'Entry type: trustedCertEntry' \
	| grep -E '^(Alias name|Entry type|Issuer|Valid from):'
Alias name: cacrt-00
Entry type: trustedCertEntry
Issuer: ...
Valid from: ...
Alias name: cacrt-01
Entry type: trustedCertEntry
Issuer: ...
Valid from: ...
[user@computer ~/tmp]$
  1. Ajoutez un autre service avec son certificat public
    Si vous avez d'autres services HTTPS n'utilisant pas le CA de votre établissement, vous pouvez importer le certificat de service externe dans votre truststore.
  • récupérez le certificat de ce service externe
  • importez ce fichier certificat manuellement dans le truststore

Exemple avec l'API de test de Docaposte a. Récupérez le certificat

[user@computer ~/tmp]$ openssl s_client -showcerts -connect demo-parapheur.dfast.fr:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > demo-parapheur.pem

b. Ajout au magasin trustore

[user@computer ~/tmp]$ keytool -keystore truststore.jks -storepass my_password \
	-alias 'demo-parapheur' -import -noprompt -file demo-parapheur.pem
Certificate was added to keystore
[user@computer ~/tmp]$
  1. Exportez votre truststore
    Exportez ce fichier 'truststore.jks' vers votre serveur esup-stage et retenez le mot de passe de celui-ci.
  • Reportez cette config du truststore dans la variable 'CATALINA_OPTS' de votre tomcat (voir section suivante 'Lanceur Tomcat')
  • Reportez cette config du truststore dans la config d'esup-stage, voir les propriétés 'docaposte.truststore.*' dans le fichier /etc/estage/estage.properties

Lanceur Tomcat

Le tomcat doit être lancé avec les paramètres indiquant les paramètres de chargement du truststore.

Votre fichier de configuration devra contenir les variables 'CATALINA_OPTS' de lancement suivante :

  • 'javax.net.ssl.trustStore' : chemin du fichier truststore
  • 'javax.net.ssl.trustStoreType' : type de magazin (JKS ou PKCS12)
  • 'javax.net.ssl.trustStorePassword' : mot de passe associé à votre fichier magazin truststore

Exemple avec un apache-tomcat-9.0 packagé en Red Hat

  • /etc/sysconfig/tomcat9.0
...

CATALINA_OPTS=" -Xms2048m -Xmx4096m ... -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=my_password ... "

Exemple à partir d'un apache-tomcat binaire récupérer sur le site Apache Tomcat

  • ${CATALINA_HOME}/bin/setenv.sh (fichier exécutable à créer si inexistant)
...

# TOMCAT > MEMOIRE
export CATALINA_OPTS="$CATALINA_OPTS -Xms2048m -Xmx4096m"
...
# TOMCAT > TRUSTSTORE certificats acceptés
export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore"
export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStoreType=JKS"
export CATALINA_OPTS="$CATALINA_OPTS -Djavax.net.ssl.trustStorePassword=my_password"

Vérifiez que les variables sont bien chargées après le redémarrage du tomcat

[root@server ~]# ps aux | grep tomcat 
tomcat ... /usr/bin/java ... -Djavax.net.ssl.trustStore=/etc/ssl/catalina.truststore -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=my_password ...
[root@server ~]# 

Module Docaposte

Pour le module "Docaposte" intégré dans esup-stage, le service "Docaposte" via l'organisme certificateur (Certinomis, ChamberSign, ...) vous a normalement fourni un fichier avec l'extension '.p12' (au format PKCS12) nécessaire à l'authentification auprès du service.

Tout d'abord, il faut vérifier la validité de ce fichier 'certificat.p12' qui doit contenir la clé privée d'authentification et les certificats publics associés.

  • Vérification de la présence d'une clé privée valide dans le fichier 'certificat.p12': Pour le module "Docaposte" intégrer dans esup-stage, le service "Docaposte" via l'organisme certificateur (Certinomis, ChamberSign, ...) vous a normalement fourni un fichier avec l'extension '.p12' (au format PKCS12) nécessaire à l'authentification auprès du service. Tout d'abord, il faut vérifier la validité de ce fichier 'certificat.p12' qui doit contenir la clé privée d'authentification et les certificats publics associés.

  • Vérification de la présence d'une clé privée valide dans le fichier 'certificat.p12':

[root@server ~]# keytool -list -v -keystore /data/certificat.p12 -storepass my_password \
	| grep -C 6 '^Entry type: PrivateKeyEntry' \
	| grep -E '^(Alias name|Creation date|Entry type|Owner|Issuer|Valid from):'
Alias name: 1
Creation date: May 16, 2023
Entry type: PrivateKeyEntry
Owner: ...
Issuer: ...
Valid from: Tue Nov 22 08:12:07 CET 2022 until: Thu Nov 21 08:12:07 CET 2024
[root@server ~]# 
  • Vérification de la présence des certificats publics présents dans le fichier 'certificat.p12' :
[root@server ~]# openssl pkcs12 -in certificat.p12 -out docaposte.crt -nodes
Enter Import Password: *****
[root@server ~]# cat docaposte.crt
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
[root@server ~]# 

Paramétrage dans ESUP-Stage

Fichier estage.properties

Dans le fichier /etc/estage/estage.properties du serveur ESUP-Stage, complétez les informations suivantes :

# uri vers le webservice Docaposte
docaposte.uri=https://demo-parapheur.dfast.fr/parapheur-soap/soap/v1/Documents
# numéro siren fourni par Docaposte
docaposte.siren=0123456789
# chemin absolu du fichier .p12
docaposte.keystore.path=/data/certificat.p12
# mot de passe permettant la lecture du fichier p12
docaposte.keystore.password=xxx
# chemin absolu du fichier .pks
docaposte.truststore.path=/data/ProductionFAST.jks
# mot de passe permettant la lecture du fichier jks
docaposte.truststore.password=xxx

Centre de gestion

Au niveau de chaque centre de gestion qui doit donner droit à la signature électronique, renseignez dans l'onglet Signature électronique le code du circuit de signature paramétré dans Docaposte. Pour ce faire :

  • Rendez-vous à l'emplacement Centre de gestion > Liste des centre de gestion puis sélectionnez un centre de gestion.
  • Dans ce centre de gestion, rendez vous dans l'onglet Signature électronique.

Dans l'Ordre de signature, vous pouvez changer l'ordre des signataires à l'aide de la croix multidirectionnelle qui s'affiche en survolant avec la souris le nombre précédent l'intitulé du signataire.
Dans cette version, il n'est possible d'utiliser que des signatures OTP. Cela signifie que chaque signataire recevra un mail ou sms l'invitant à signer électroniquement la convention. La signature automatique (signature serveur) n'est pas prise en charge.

Contrôle des métadonnées

Dans Fast, vous avez la possibilité de contrôler la bonne transmission des métadonnées en allant dans le répertoire

  • Preuve => Cliquez sur un document dans la rubrique "A signer(OTP) puis en bas de page vous verrez le lien "Preuve". Dans une des pages s'afficheront les métadonnées.
  • OTP => Cliquez sur un document dans la rubrique "A signer(OTP) puis en bas de page vous verrez le lien "OTP". Seront affichées toutes les métadonnées disponibles. Si l'étape de signature associée à l'OTP n'a pas encore été dépassée, vous pouvez modifier manuellement les métadonnées. Cela est utile en cas d'erreur de saisi dans ESUP-Stage.

Certificat personnel

Il est possible de faire signer une convention avec le certificat personnel d'un utilisateur. Pour ce faire, vous devez choisir dans le paramétrage du centre de gestion le paramètre "Signature serveur". Dans Fast, vous devez renseigner à l'étape de signature concernée le paramètre Signature. Exemple de paramétrage d'un centre de gestion avec un workflow incluant une signature personnel (signature de l'étudiant) : image

Même exemple de workflow avec 4 signatures OTP et une signature avec un certificat personnel du côté de Fast image