Contexte
Le consortium ESUP-Portail gère un nombre de plus en plus important de documents qui doivent être signés par ESUP-Portail et souvent par un établissement membre.
Ces documents correspondent à des adhésions, des conventions, des devis, facturations etc.
L'instance esup-signature d'ESUP-Portail facilite la dématérialisation et le flux de gestion de ces documents, notamment vis-à-vis de ces signatures.
Ainsi l'instance esup-signature d'ESUP-Portail permet à son/sa président(e) ou un de ses représentants par délégation de signer des documents qui engagent ESUP-Portail.
Cette même instance permet aussi de faire signer un partenaire ou d'utiliser un document déjà signé pour qu'il soit sur-signé par ESUP-Portail.
Dans le cas où le document est signé numériquement (et ne correspond pas une 'simple' signature calligraphique / apposition d'image) via une autre instance d'esup-signature ou tout autre outil, l'instance d'esup-signature d'ESUP-Portail conserve les signatures numériques déjà présentées. Si les documents signés via ESUP-Portail de manière dématérialisée ne nécessitent pas l'usage d'une signature qualifiée (type RGS**) de personnes physiques, on préserve ainsi toute signature de ce type qui aurait pu être utilisée en amont de la signature ESUP-Portail par un de nos partenaires.
Caractéristiques d'esup-signature.esup-portail.org
En résumé, d'un point de vue pratique, l'instance esup-signature d'ESUP-Portail propose ces caractéristiques :
- authentification shibboleth avec des rôles affectés en fonction de l'attribut eduPersonPrincipalName (eppn) sans lien direct avec un annuaire LDAP ;
- un usage systématique d'un certificat cachet serveur RGS** tel que le supporte esup-signature.
Installation matérielle
L'instance esup-signature d'ESUP-Portail est installée et gérée par l'Université de Rouen Normandie ; elle correspond à une Machine Virtuelle opérée par la solution VMware vSphere de l'université.
Le certificat cachet serveur propre à l'esup-signature d'ESUP-Portail a été acquis auprès de certinomis par le consortium lui-même, un membre de l'université de Rouen en est le mandataire et le responsable technique.
Ce certificat cachet serveur se matérialise par :
- une carte à puce SIM "Gemalto IDPrime 940C"
- intégrée dans un lecteur USB de carte à puce "Feitian SCR301"
- lui-même branché dans un hub USB réseau "Digi AnywhereUSB® 8 Plus" racké dans une baie du data center de l'université de Rouen
- et monté par linux en périphérique USB via "AnywhereUSB Manager" sur la machine virtuelle dédiée à l'instance d'esup-signature d'ESUP-Portail
Configurations logicielles
Esup-signature supporte les certificats cachets (seal) soit :
- en passant par OpenSC, qui détermine alors le driver libre à utiliser en fonction de la clef ;
- cette possibilité a l'avantage d'utiliser des logiciels libres directement disponibles via le sysème de paquets de votre distribution (opensc)
- cela présuppose cependant qu'un driver libre supporte effectivement la clef proposée ; si les certificats idprime-940 sont supportés en opensc 0.23.0, les idprime-940c ne le sont que sur la toute dernière 0.24.0 sortie en déc. 2023 et non encore disponible à cette date par exemple ; plus d'informations sur la page OpenSC sur ce même wiki.
- en passant directement par le driver / librairie propriétaire
- cette option a l'avantage d'utiliser le driver officiel livré par l'entreprise vendant le support matériel du cachet ; le support est donc normalement garanti (normalement sur tous les OS dont linux si vous installez esup-signature sur un serveur linux ; fortement recommandé)
- cela a aussi l'avantage de proposer un process de signature plus rapide (constatation à l'usage)
→ si nous avons bien validé le fonctionnement de notre cachet idprime-940c avec le driver libre proposé dans opensc 0.24.0, nous avons opté malgré tout pour l'usage du driver propriétaire.
Le service https://esup-signature.esup-portail.org est déclaré dans la fédération ESR portée par Renater : https://registry.federation.renater.fr/entities/view/2294
L'usage de la signature par certificat cachet serveur est systématique : le cachet serveur permet la réalisation de cachets systématiques côté serveur en masse sans requérir à une installation ou configuration supplémentaire pour les clients signataires.
La demande d'une signature par le/la président(e) d'ESUP-Signature (ou délégataire) est possible à toute personne authentifiée (fédération ESR).
L'initiation d'un circuit autre est disponible pour certains membres d'ESUP-Portail (authentifiés et identifiés via la fédération ESR à nouveau).
Fichier application.yml
Le fichier de configuration de cette instance d'esup-signature est ainsi le suivant (à quelques paramètres/passwords de sécurité près) :
global:
root-url: https://esup-signature.esup-portail.org
domain: esup-portail.org
nexu-url: http://localhost:9795
nexu-version: 1.22, 1.23 ou Esup-DSS-Client 1.0
hide-wizard: true
hide-auto-sign: true
hide-send-sign-request: true
hide-wizard-except-roles:
hide-auto-sign-except-roles:
hide-send-sign-except-roles:
enable-su: false
enable-splash: true
application-email: no-reply@esup-portail.org
hours-before-refresh-notif: 24
share-mode: 1
pdf-only: true
seal-certificat-pin: ******
# usage du driver propriétaire et pas d'OpenSC
# seal-certificat-type: OPENSC
seal-certificat-type: PKCS11
seal-certificat-driver: /usr/lib/pkcs11/libIDPrimePKCS11.so
infinite-scrolling: true
return-to-home-after-sign: false
naming-template: "[title]"
signed-suffix: "_signed"
trash-keep-delay: 15
disable-cert-storage: true
export-attachements: false
authorized-sign-types: certsign
tomcat:
ajp:
port: 8009
info:
app:
name: esup-signature
description: Instance de production
tags:
environment: PROD
management:
health:
ldap:
enabled: false
endpoints:
jmx:
exposure:
include: '*'
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
spring:
session:
jdbc:
initialize-schema: ALWAYS
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/esupsignature
password: *************
username: esupsignature
jdbc-url: ${spring.datasource.url}
hikari:
auto-commit: false
tomcat:
validation-query: SELECT 1;
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
jdbc:
lob:
non_contextual_creation: true
show-sql: false
open-in-view: false
mail:
host: smtp.univ-rouen.fr
messages:
basename: i18n/messages
encoding: UTF-8
fallback-to-system-locale: false
data:
ldap:
repositories:
enabled: false
thymeleaf:
cache: true
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
mail:
from: no-reply@esup-portail.org
sms:
enable-sms : false
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/constraint.xml
server-signing-keystore-filename: validate_service.p12
server-signing-keystore-password: password
server-signing-keystore-type: PKCS12
tsp-server: http://tsa.belgium.be/connect
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
fs:
vfs-test-uri: /tmp
pdf:
convert-to-pdf-a: true
pdf-a-level: 2
path-to-g-s: /usr/bin/gs
path-to-fonts : /usr/share/fonts
pdf-to-image-dpi: 72
security:
shib:
idp-url: https://idp.univ-rouen.fr
principal-request-header: REMOTE_USER
title: Fédération d'identité RENATER / Shibboleth
domains-white-list-url: https://eduspot.renater.fr/eduspot/whitelist-eduspot.txt
web:
group-to-role-filter-pattern: for.esup-signature.role.(\w*)
mapping-groups-roles:
for.esup-signature.admin: ROLE_ADMIN
for.esup-signature.user: ROLE_USER
for.esup-signature.create-sign-req: ROLE_CREATE_SIGNREQUEST
for.esup-signature.esup-coord: ROLE_CREATE_AUTOSIGN
for.esup-signature.seal: ROLE_SEAL
ws-access-authorize-ips: 127.0.0.1
group-mapping-spel:
for.esup-signature.admin: "#eppn == '*****@univ-rouen.fr' or #eppn == '*****@univ-rouen.fr'"
for.esup-signature.user: "true"
for.esup-signature.seal: "true"
for.esup-signature.create-sign-req: "#eppn == '****@univ-rouen.fr' or #eppn == '****@univ-rouen.fr' or #eppn == '*****@univ-lyon3.fr' or #eppn == '*****@uphf.fr' or #eppn == '****@univ-lorraine.fr' or #eppn == '****@toulouse-inp.fr'"
for.esup-signature.esup-coord: "#eppn == '****@univ-rouen.fr' or #eppn == '***@univ-rouen.fr' or #eppn == '****@univ-lyon3.fr' or #eppn == '****@toulouse-inp.fr'"
server:
servlet:
session:
tracking-modes: COOKIE
error:
include-stacktrace: always
port: 8080
tomcat:
mbeanregistry:
enabled: true
remoteip:
remote-ip-header: X-Forwarded-For
basedir: ./temp
max-swallow-size: -1
sign:
aes-key : "0000000000000000"
cades-digest-algorithm: SHA256
cades-signature-level: CAdES_BASELINE_LT
container-type: ASiC_E
default-signature-form: XAdES
pades-digest-algorithm: SHA256
pades-signature-level: PAdES_BASELINE_LT
password-timeout: 60000
signature-packaging: ENVELOPED
xades-digest-algorithm: SHA256
xades-signature-level: XAdES_BASELINE_LT
logging:
file:
name: /var/log/esup-signature/esup-signature.log
pattern:
console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(%X{userId:-system}){cyan} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"
file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(%X{userId:-system}){cyan} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"
level:
root: warn
org.esupportail.esupsignature: info
org.verapdf: error
org.apache.pdfbox: error
eu.europa.esig.dss: error
org.springframework.web.filter.CommonsRequestLoggingFilter: error
springdoc:
api-docs:
enabled: true
path: /api-docs
swagger-ui:
enabled: true
supported-submit-methods: []
path: /swagger-ui.html
packages-to-scan: org.esupportail.esupsignature.web.ws
show-actuator: true