Configuration

Comment paramètrer le DMP

Comme toute application spring-boot, la DevBox-Santé DMP se configure au travers du fichier application.yml. Suivant le paradigm Convention Over Configuration, la DevBox-santé DMP peut fonctionner avec un minimum de configuration. Nous pouvons tout de même configurer et changer certains points de configuration.

Logging

Comme la gestion des traces de l’application qui est différente en développement de la production.

logging.level:
  fr.devboxsante: info
  fr.devcoop: warn
  org.springframework: error
  org.apache.cxf.services: info # à mettre à debug pour tracer les messages soaps

Spécifique au DMP

Les configurations évolutives du DMP sont configurés par défaut, mais elles peuvent être surchargées :

devbox-sante:
  dmp:
    parameters:
      # Url du document xml contenant le paramétrage du DMP [FI-URL]
      url: https://www.dmp.fr/web/dmp/documents/param-lps
      delayBetweenSyncInHours: 24
      document:
        checkHash: true

    #serveur de temps
    time.ntpServer: fr.pool.ntp.org

Spécifique à la validation CDA

devbox-sante:
  dmp:
    # path vers les resources de validation CDA.
    # la resource peut être récupéré directement depuis le site de esante.gouv.fr ou depuis les resources fournies
    cda.validator:
      resourceName: testContenuCDA-3.0-20230901_DMP-356-370.zip  # dans le classpath
#      resourceName: https://installers.devbox-sante.fr/installer/resources/esante.gouv.fr/testContenuCDA-3.0-20230901_DMP-356-370.zip # sur le net
      charset: ISO-8859-1

La génération des ressources de validation des CDA est dorénavant réalisé depuis des scripts de transformation des sources disponibles sur les sites github de l’ANS : https://github.com/ansforge/TestContenuCDA-3-0 Les équipes de la DevBox-Santé maintiennent à jour un livrable régulièrement sur https://installers.devbox-sante.fr/installer/resources/esante.gouv.fr/

Les Jeux de Valeurs du DMP

Deux modes de chargement disponible pour les nomenclatures (jeux de valeurs) du DMP. En effet, les jeux de valeurs mis à disposition par le GIE Sesam-vitale sont disponibles régulièrement sur le site industriels.sesam-vitale.fr . Parfois certaines valeurs ne sont pas encore disponible de cette manière. Cela impose un autre mode de récupération de ces jeux de valeurs, en allant directement sur le site de l’ANS dédié : https://mos.esante.gouv.fr/NOS. Parfois, c’est le contraire :( .

devbox-sante:
  dmp:
    nomenclature:
      mode: 
#        nos : directement sur le site https://mos.esante.gouv.fr/NOS/
        zip # zip : jeux de valeurs mis à disposition sur le site industriels du sesam-vitale 
      
      resourceName: JDV DMP_API_V2_XML.zip # path du fichier zip disponible sur le filesystem  / classloader
#      resourceName: https://installers.devbox-sante.fr/installer/resources/esante.gouv.fr/20231124-JDV_DMP_API_V2_XML.zip   
      #Encodage de caractère utilisé dans ces jeux de valeurs.
      charset: UTF-8

Les urls du DMP

devbox-sante:
  dmp:
    url.prefix:
      # environnement production
      https://lps-igc-sante.dmp.gouv.fr/

    url.web.prefix:
      # environnement production
      https://ledmp.dmp.gouv.fr

Remarque : pour plus d’informations sur les différents environnements /dmp/howtos/environnements

Les informations du LPS homologuée

debox-sante:
  dmp:
    lpsInfo:
      homologationId: XXX-xxxxxx-xxx
      version: x.0
      nom: VOTRE_LOGICIEL
      #Numéro de série ou identifiant de l'installation du logiciel
      id: 1.2.250.1.287.1.1234567
    source:
      # 1.2.250.1.287 est l'OID de Devcoop
      # 1.2.250.1.287.1 est l'OID correspondant à la DMPC pour Devcoop
      idRoot: 1.2.250.1.287.1
      # l'idExtension doit prendre pour valeur une valeur unique de l'instance installé EX_2.1-1130
      idExtension: 1234567

En pratique il faut assurer une cohérence entre l’idExtension de la source et le dernier composant de l’id du lpsInfo. EX_GEN-1350 et EX_2.1-1130

Surcharge les LpsInfo dans le header HTTP

La configuration du proxy REST contient les informations par défaut de configuration du LPS  cf. paragraphe précédent. Il est toutefois possible de surcharger ces valeurs (comme le numeroAutorisation qui peut être confidentiel) en les passant dans les header HTTP des requêtes.

Voici la liste des informations LPS pouvant etre surchargées :

Informations LPS Clef dans le header
id de l’homologation dmp.lpsInfo.homologationId
nom du lps dmp.lpsInfo.nom
version du LPS dmp.lpsInfo.version

Par exemple :

curl -X GET "http://localhost:8485/insi/rechercheAvecVitale" -H "accept: application/json" -H "dmp.lpsInfo.homologationId: ÀPréciser"

Différents modes d’authentification

Les modes d’authentification supportés par la DevBox-Santé DMP sont les deux demandés dans le guide d’intégration du DMP. Il s’agit du mode d’authentification directe (avec l’usage de la carte CPS) et indirecte (avec l’usage des certificats serveurs). Ils peuvent être mis en œuvre de manière différente.

Authentification directe

Configuration de la DevBox-santé DMP en authentification directe pour un usage des cartes CPS/CPE pour les authentifications et signatures.

devbox-sante:
  dmp:
    # authentification directe utilisant les certificats de la carte CPS
    security.mode: cps

Authentification directe : CPS Agent

Un mode d’authentification intégrant le module CPS agent se fait de la manière suivante :

devbox-sante: 
  dmp: 
    # authentification directe depuis le backend par l'intermédiaire d'un agent CPS sur le poste du client
    security.mode: withCpsAgent

Authentification indirecte

Authentification indirecte par l’utilisation des certificats serveurs. Pour en savoir plus sur l’obtention des certificats, suivez cette documentation.

devbox-sante: 
  dmp: 
    # authentification indirecte utilisant les certificats p12 serveurs
    security.mode: p12

    # informations relatives au certificat smime
    smime:
        p12:
            path:
                asip-p12-EL-TEST-ORG-SIGN-xxxx.p12
            password:
                password
    # informations relatives au certificat ssl
    ssl:
        p12:
            path:
                asip-p12-EL-TEST-ORG-AUTH_CLI-xxxx.p12
            password:
                password

Authentification indirecte : multi-certificats

Possibilité de supporter plusieurs certificats pour des établissements géographiques/juridiques différents :

devbox-sante: 
  dmp: 
    # authentification indirecte avec certificat nommé
     security.mode: p12s
            
        # informations relatives au certificat smime
        smime:
            p12:
              -
                name: devcoop-sign
                path: asip-p12-EL-TEST-ORG-SIGN-20210427-103248.p12
                password: password
              -
                name: devcoop-sign2
                path: autre.p12
                password: autrePassword
        ssl:
            p12:
              -
                name: devcoop-auth
                path: asip-p12-EL-TEST-ORG-AUTH_CLI-20210427-102425.p12
                password: password
              -
                name: devcoop-auth2
                path: autre_auth.p12
                password: autre_authPassword

Pour charger dynamiquement les certificats, ssl et smime il suffit de rajouter les noms des certificats (dmpAuthenticationP12.name, dmpSignatureP12.name) dans le header de la requête HTTP :

curl -X GET "http://hostname:port/dmp/td..." -H "accept: application/json" -H "dmpAuthenticationP12.name: ÀPréciser" -H "dmpAuthenticationP12.name: ÀPréciser"

Authentification indirecte : P12 in Header HTTP

Le mode p12InHeader permet de faire passer les deux certificats p12 dans l’entête HTTP de la requête, cela permet à l’appelant de conserver et décider des certificats utilisés lors de l’appel du proxy.

Le header étant plus lourd il faudra veiller à ce que la configuration spring prenne en compte la taille du header d’au moins 40Kb.

La configuration application.yml est :

server:
    max-http-header-size: 50KB

devbox-sante: 
  dmp: 
    # authentification indirecte avec certificats dans le header HTTP
     security.mode: p12InHeader

Et la requête doit contenir les informations dans le header.

curl --location --request POST 'http://localhost:8080/dmp/td21SubmitDocuments' \
--header 'Content-Type: application/json' \
--header 'dmpAuthentication.p12: MIIcdAIBAzCCHDo...AA==' \
--header 'dmpAuthentication.password: PASSWORD' \
--header 'dmpSignature.p12: MIIcoQIBAzCCH...IAA==' \
--header 'dmpSignature.password: PASSWORD' \
--data-raw '{
    "context": {
    },
    "request": {
        ...
    }
}'

Le certificat p12 doit être passé en base64.

Windows Powershell:

$cert = get-content 'certificate.p12' -Encoding Byte
$base64 = [System.Convert]::ToBase64String($cert)
echo $base64

Linux:

base64 -w 0 certificate.p12 > outputfile

Mac OS:

base64 -i certificate.p12 -o outputfile

Authentificatino directe Stellair

Une page de documentation spécifique se trouve ici : /dmp/howtos/demo-stellair