Récupération des sources
Lorsque tous les Prérequis sont installés et PostgreSQL configuré, vous pouvez récupérer les sources.
A partir de cette étape vous n’êtes plus en root. Ici l'utilisateur courant est le compte local esup :
cd /opt/ sudo mkdir esup-signature sudo chown esup:esup esup-signature/ -R git clone https://github.com/EsupPortail/esup-signature.git cd esup-signature
Le code est cloné dans le dossier ./esup-signature, le dépôt est positionné sur la branche master. Pour toutes les informations relative à l'exploitation et à la mise à jour du code voir le page dédié ici : Exploitation
Configuration
Le fichier application.yml présent dans les sources est un exemple de configuration basée sur environnement comportant un LDAP et un gestionnaire de groupes (grouper utiliser par l'Université de Rouen en l’occurrence). Les mentions de "for.esup-signature.xxxx" correspondent aux noms des groupes fournis par grouper. Cela ne veut pas dire que grouper soit obligatoire ni même que les noms de groupes doivent respecter ce format.
Lorsque vous utiliser maven pour compiler ou lancer l'application c'est le fichier situer dans src/main/resources/application.yml qui est pris en compte. Il est possible de placer le fichier application.yml ailleurs sur le système de fichier en précisant son emplacement à l'aide de l'option -Dspring.config.location=/<DIR>/application.yml lors que l'utilisation de la commen mvn
application.yml
La configuration principale d' esup-signature se fait au travers application.yml
Pour commenter une ligne il faut ajoute un # devant.
Il faut faire attention à l'indentation lors de la modification du fichier. Une mauvaise indentation peut faire échouer la compilation
global
Dans la plupart des cas il s'agit ici de modifier root-url par l'adresse de votre esup-signature. Vous pouvez aussi configurer le système d'archivage et activer le switch user.
global: root-url: https://esup-signature.univ-ville.fr # Adresse d'accès à votre instance nexu-url: https://localhost:9895 nexu-version: 1.23-SNAPSHOT nexu-download-url: /downloads/nexu-bundle.zip hide-wizard: false # Désactiver le bouton "Assistant de création de demande" hide-auto-sign: false # Désactiver le bouton "Auto signature" hide-send-sign-request: false # Désactiver le bouton "Demander une signature" hide-wizard-except-roles: # rôles faisant exception à la règle hide-wizard précédente hide-auto-sign-except-roles: # rôles faisant exception à la règle hide-auto-sign précédente hide-send-sign-except-roles: # rôles faisant exception à la règle hide-send-sign précédente # archive-uri: smb://serveur_fichier/archives # chemin pour l'archivage des documents # delay-before-cleaning : 0 # Délai en jours après signature pour archivage et nettoyage des documents (désactivé si commenté) enable-su: false # Activer ou non le switch user enable-splash: true # Activer ou non le message d'accueil de la première connexion application-email: esup.signature@univ-ville.fr # Adresse email du support qui apparaitra dans l'aide hours-before-refresh-notif: 24 # Nombre d'heures entre deux relances utilisateur share-mode: 3 # Valeur de 0 à 3 : 0 = délégations désactivées, 1 = force le mode signature du délégué, 2 = force signature du mandant, 3 = choix du mode possible par l'utilisateur return-to-home-after-sign: false # Forcer le retour à la page d'accueil après signature infinite-scrolling: true # Activer l'infinite scrolling sur le tableau de bord, sinon bascule sur de la pagination signed-suffix: "_signé" # suffix ajouté au fichiers signés naming-template: "[title]" # template de renommage des fichiers trash-keep-delay: -1 # Délai de conservation dans la corbeille en jours (-1 non actif) disable-cert-storage: false # Activer/Désactiver la possibilité de stocker des certificats utilisateurs nb-days-before-deleting: -1 # Nombre de jours après alerte pour suppression des demandes en attente (-1 non actif) nb-days-before-warning: -1 # Nombre de jours avant alerte de suppression pour les demandes en attente (-1 non actif) enable-captcha: false # Activer/Désactiver la detection de robot à la connexion ;-) max-upload-size: 52428800 # Taille maximum des uploads de fichiers en bytes only-pdf: false # true : restreindre l'upload aux seuls PDF seal-certificat-driver: /lib/pkcs11/libIDPrimePKCS11.so # Pilote du certificat cachet seal-certificat-pin: ****** # Code pin du certificat cachet shib-users-domain-white-list: # Whitelist des domaines authorisés à obtenir le ROLE_USER pour les connexions Shibboleth - univ-ville.fr - inv-univ-ville.fr
Pour la gestion des rôles voir : Documentation administrateur#Gestiondesr%C3%B4les
Détails concernant le système de renommage des fichiers :
Le modèle est construit à l'aide d'attributs entre crochets.
default : [title]
Les attributs disponibles sont :
- [title] : titre du document original
- [id] : identifiant du parapheur
- [worflowName] : nom du circuit
- [user.name] : nom prénom de l'utilisateur courant
- [user.eppn] : eppn de l'utilisateur courant
[user.initials] : initiales de l'utilisateur courant - [UUID] : un identifiant unique
- [order] : le numéro d'ordre de création pour un même circuit
- [timestamp] : timestamp sous forme de long
- [date-fr] : date dd/MM/yyyy hh:mm
- [date-en] : date yyyy-MM-dd hh:mm
tomcat
Ce paramètre permet de spécifier le port ajp dans le cas ou l'application est démarrée directement (en lançant directement esup-signature.war ou en utilisant mvn springboot:run par exemple)
Par défaut ces lignes sont commentées, cela doit être ainsi lorsque l'application est démarrée par un serveur Tomcat.
#tomcat: # ajp: # port: 6009
spring
session
À ne pas modifier. Permet l'activation de spring-session.
session: jdbc: initialize-schema: always save-mode: always
data, datasource
Avtivation de ldapRepository et configuration de la base de donnée :
data: ldap: repositories: enabled: true datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/esupsignature password: esup username: esupsignature jdbc-url: ${spring.datasource.url} hikari: auto-commit: false
jpa
Il faut prêter une attention particulière au paramètre ddl-auto. Mode update permet la création et la mise à jour de la base de donnée lors du démarrage de l'application ou des tests. Ce mode peut éventuellement être utilisé lors des mises à jour de l'application. Le reste du temps (en production par exemple) ce paramètre peut être positionné sur validate qui ne fera qu’exécuter un contrôle de la base de données.
Attention au mode create qui, lui, détruit et re-crée la base complète au moment du démarrage de l'application
jpa: hibernate: ddl-auto: update properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect format_sql: true jdbc: lob: non_contextual_creation: true show-sql: false open-in-view: false
ldap
Configuration de l'accès ldap pour spring (obligatoire si l'authentification CAS est activée)
ldap: base: dc=univ-ville,dc=fr password: ******** urls: ldap://ldap.univ-ville.fr username: cn=consult,dc=univ-ville,dc=fr
Configuration du serveur de mail pour l'envoi des alertes
mail: host: smtp.univ-ville.fr
servlet, thymeleaf, web, mvc
Ne pas modifier, concerne la configuration web de spring
servlet: multipart: enabled: true max-file-size: 1280KB max-request-size: 1280KB resolve-lazily: true thymeleaf: cache: false encoding: UTF-8 mode: HTML servlet: produce-partial-output-while-processing: false web: resources: cache: cachecontrol: max-age: 1d cache-public: true static-locations: classpath:/static mvc: static-path-pattern: /**
ldap
La configuration ldap hors spring est spécifique à votre établissement, elle précise les modalités de recherche de vos utilisateur dans l'annuaire
ldap: search-base: ou=people # base de recherche (ou dans laquelle se trouve les comptes utilisateurs group-search-base: ou=groups # base des groupes user-id-search-filter: (uid={0}) # le champ dans lequel on trouve le login des utilisateurs group-search-filter: member={0} # filtre pour la recherche des groupes member-search-filter: (&(uid={0})({1})) # filtre pour contrôler l'appartenance à un groupe mapping-filters-groups: # liste d'attribution de groupe en fonction d'un filtre LDAP student : "(eduPersonAffiliation:=student)" staff : "(eduPersonAffiliation:=staff)"
On peut utiliser mapping-filters-groups pour attribuer des groupes à un utilisateur, par exemple : avec mes-users : "eduPersonAffiliation:=member", toutes les personnes issue de ce filtre se verront affectées au groupe "mes-users"
Si dans mapping-groups-roles on a mes-users: ROLE_USER, l'utilisateur obtiendra le rôle ROLE_USER.
Attention vos requetes LDAP doivent impérativement être mises entre parentheses.
Pour la gestion des rôles voir : Documentation administrateur#Gestiondesr%C3%B4les
Dans la partie mail (hors spring) vous pouvez paramétrer l'adresse from pour l'envoi de mails
mail: from: no-reply.esup-signature@univ-ville.fr
sms
Cette partie permet de configurer un service d'envoi de sms pour l'utilisation de la fonction One Time Password à destination des personnes extérieures à l’établissement. Pour l'instant seule une implémentation pour SMSU est disponible
sms: enable-sms : false # service-name: SMSU # url: https://smsu-api.univ-ville.fr/ # username: sms-account # password: ********
dss
tsp-server : adresse url du serveur de temps utilisé pour les horodatages des signatures électroniques
ks-filename : par défaut le chemin est relatif. Comme dans la configuration logback, si vous voulez spécifier un chemin absolu, le dossier doit avoir été créé avant le premier lancement.
trusted-certificat-url-list : ici vous pouvez ajouter des liens vers les url des certificats non présents dans le journal officiel mais valide dans votre établissent :
Les autres paramètres n'ont pas besoin d'être modifiés
dss: cache-data-source-driver-class-name: org.hsqldb.jdbc.JDBCDriver cache-data-source-url: jdbc:hsqldb:mem:cachedb cache-password: cache-username: sa default-validation-policy: policy/sign-constraint.xml server-signing-keystore-filename: validate_service.p12 server-signing-keystore-password: password server-signing-keystore-type: PKCS12 tsp-server: http://timestamp.sectigo.com ks-filename: oj_keystore.p12 ks-password: dss-password ks-type: PKCS12 lotl-country-code: EU lotl-url: https://ec.europa.eu/tools/lotl/eu-lotl.xml oj-url: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv:OJ.C_.2019.276.01.0001.01.ENG trusted-certificat-url-list:
Si votre serveur se trouve derrière un forward proxy, vous pouvez ajouter la configuration suivante directement à la racine du fichier de configuration. Cela permet à DSS d'aller chercher les certificats de confiance sur les serveurs européens
proxy: httpEnabled: "true" httpHost: "proxy.univ-ville.fr" httpPort: "3128" httpUser: "" httpPassword: "" httpsEnabled: "true" httpsHost: "proxy.univ-ville.fr" httpsPort: "3128" httpsUser: "" httpsPassword: "" httpExcludedHosts: "" httpsExcludedHosts: ""
fs (file system)
La partie file system (fs) permet de configurer une source principale de donnée pour chaque type de stockage (smb, cmis, vfs). esup-signature ne prend en charge qu'une seule source par type.
fs: smb-login: esup-signature # login du compte autorisé à acceder au partage SMB smb-password: ******** smb-uri-test: smb://smb.univ-ville.fr # chemin vers un partage de test. Pour smb il sera possible d'utiliser des chemins absolus vfs-test-uri: /tmp # chemin vers un repertoire local de test. Pour vfs il sera possible d'utiliser des chemins absolus (FTP compris) cmis-uri-test: https://esup-signature.univ-ville.fr/nuxeo # url du chemin vers le serveur CMIS /!\ ce chemin sert pour autant pour les tests que comme reférence absolue du serveur cmis-login: Administrator # login autorisé à acceder au serveur CMIS cmis-password: Administrator cmis-respository-id: default cmis-root-path: /default-domain/workspaces # chemin vers le dossier accéssible par esup-signature
Il y a actuellement une confusion concernant la configuration des acces aux stockages externes.
Pour les stockages utilisant de SMB ou VFS, il s'agit de configurer une url de test (pour les test d'intégration). Par la suite, au niveau du paramétrage dans esup-signature, il sera possible de mettre n'importe quel url absolue (pour smb, le compte configuré devra avoir les bons accès)
Pour CMIS, l'attribut cmis-uri-test est mal nommé car il s'agit de l'adresse "fixe" du server CMIS (Nuxeo par ex). Au niveau de l'application il faudra configurer des adresses relatives.
Pour plus d'information voir la page Gestion des circuits#D%C3%A9finirunesourcepourlesdocuments
Paramètres de traitement des PDF
pdf: convert-to-pdf-a: true path-to-g-s: /usr/bin/gs pdf-a-level: 2 pdf-to-image-dpi: 72
security
La sécurité est gérée par Spring Security. Il est possible d'activé 3 mécanismes de sécurité : OAuth, Shibboleth et/ou CAS. Pour désactiver une ou l'autre de ces méthodes, il suffit de commenter les lignes qui s'y réfèrent.
Pour une explication détaillée du fonctionnement de la sécurité, voir : Configuration de la sécurité
CAS nécessite la configuration d'un LDAP. C'est la solution idéale pour une utilisation interne
security: cas: service: https://esup-signature.univ-ville.fr/login/cas title: Compte Université (CAS) url: https://cas.univ-ville.fr # shib: # credentials-request-header: MEMBER # idp-url: https://idp.univ-ville.fr # principal-request-header: REMOTE_USER # title: Compte d’un autre établissement (Shibboleth) # domains-white-list-url: https://eduspot.renater.fr/eduspot/whitelist-eduspot.txt web: group-to-role-filter-pattern: <pattern groupe esup-signature>(\w*) #ici on configure un pattern permettant de retrouver (discerner) vos groupes dédiés à esup-signature mapping-groups-roles: <nom du groupe des administrateurs>: ROLE_ADMIN <nom du groupe utilisateur autorisés à accéder à l'application>: ROLE_USER ws-access-authorize-ips: 127.0.0.1 # group-mapping-spel: # for.esup-signature.user: "true"
group-to-role-filter-pattern: Ce pattern permet de donner automatiquement les rôles correspondants à la partie (\w*) du pattern. Prenons le pattern for.esup-signature.role.(\w*), si l'utilisateur est dans le groupe for.esup-signature.role.bondecommande, il obtiendra automatiquement le role ROLE_BONDECOMMANDE utilisable par la suite pour donner des droits au niveau des formulaires et des circuits.
mapping-groups-roles: Permet de définir des rôles en fonction des groupes de l'utilisateur. Le ROLE_USER est maintenant obligatoire pour accéder à l'application. Si constituer un groupe d'utilisateur est difficile, vous pouvez utiliser mapping-filters-groups dans la conf ldap pour constituer des groupes à l'aide de requêtes ldap.
ws-access-authorize-ips : permet de configurer les adresses autorisées à accéder aux web services d' esup-signature
group-mapping-spel: Sert à outre passer les groupes obtenus via ldap. Ceci est utiles si vous n'avez pas de configuration LDAP (shibboleth seul par exemple). On utilise alors la syntaxe SePL (Spring Expression Language), avec seulement l'attribut #eppn pris en compte ainsi que la possibilité de mettre la valeur "true".
Ex: pour ajouter à tout le monde le groupe "for.esup-signature.user" on peut mettre for.esup-signature.user: "true". On peut aussi utiliser la syntaxe suivante pour saisir "en dure" des personnes : for.esup-signature.admin: "#eppn == 'toto@univ-ville.fr' or #eppn == 'titi@univ-ville.fr' "
server
Paramètre du serveur tomcat embarqué dans spring-boot
server: servlet: session: tracking-modes: COOKIE error: include-stacktrace: always port: 8080 tomcat: mbeanregistry: enabled: true remoteip: remote-ip-header: X-Forwarded-For basedir: ./tem
sign
Vous pouvez ajuster finement les paramètres de signature électronique en modifiant les lignes suivante:
sign: cades-digest-algorithm: SHA256 cades-signature-level: CAdES_BASELINE_T container-type: ASiC_E default-signature-form: XAdES pades-digest-algorithm: SHA256 pades-signature-level: PAdES_BASELINE_T password-timeout: 60000 signature-packaging: ENVELOPED xades-digest-algorithm: SHA256 xades-signature-level: XAdES_BASELINE_T
logging
Permet de spécifier l'emplacement pour le fichier de logs ainsi que l'usage (facultatif) d'un fichier de configuration logback (voir chapitre suivant)
logging: file: name: logs/esup-signature.log level: root: info org.esupportail.esupsignature: info org.verapdf: error org.apache.pdfbox: error eu.europa.esig.dss: error org.springframework.web.filter.CommonsRequestLoggingFilter: error # config: classpath:logback-prod.xml # permet de configurer logback via un fichier xml
springdoc
Active l'api-doc. Pour permettre l'usage des web service directement depuis swagger, il faut modifier supported-submit-methods avec ["get", "post", "put"]
springdoc: api-docs: enabled: true swagger-ui: enabled: true supported-submit-methods: [] packages-to-scan: org.esupportail.esupsignature.web.ws
Lorsque votre configuration sera terminée, vous devez creer un commit git, ceci afin d'éviter tout problème lors d'une prochaine mise à jour. Les commandes git à lancer:
git add . git commit -m "ma conf de prod"
logback.xml
<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/esup-signature.log</file> <append>true</append> <immediateFlush>true</immediateFlush> <encoder> <pattern>[%-5level] %date{dd/MM/yyyy HH:mm:ss} %logger{35} - %msg%n</pattern> </encoder> </appender>
src/main/resources/i18n/messages.properties
Vous pouvez modifier les premières ligne du fichier messages.properties pour spécifier le texte du footer et le titre de l'application
application.title = Esup Signature application.footer=Université de Rouen Normandie
La suite ici : Compilation et déploiement