Configuration DevBox-santé INSi

Configuration de la DevBox-santé INSi

Configuration application.yml

Pour configurer la DevBox-Santé INSi, il suffit de modifier les paramètres du fichier application.yml :

devbox-sante:
    insi:
        url: https://qualiflps.services-ps.ameli.fr/lps
        lpsInfo:
            nom: À_CHANGER
            numeroAutorisation: À_CHANGER
            version: À_CHANGER
            #Cet élément XML contient l’identifiant d’installation du logiciel. Cet identifiant est généré lors de l’installation du SI-PS. Cet identifiant prend la forme d’un UUID sous sa forme canonique. Il doit être pérenne pour une installation d’un logiciel. Ce numéro est une aide au support, car il permet de regrouper les requêtes d’un même logiciel. Il permet également de compter le nombre de logiciels distincts accédant au TLSi.
            instance: À_CHANGER (UUID)

        context.strictCheckIdentifiantFacturation: true  # true par défaut mais peut être mis à false car "Il est recommandé de rendre cette donnée paramétrable dans le LPS."
   

Pour charger le fichier de configuration :

java -Dspring.config.location=./application.yml -jar insi-proxy.jar

Mode de sécurité

Il existe quatre modes d’authentification pour accéder au téléservice INSi dans le composant DevBox-Santé :

  • CPS : génération des signatures des messages SOAP en utilisant la cryptolib CPS au travers du composant DevBox-Santé CPS.
  • CPS Stellair : mode d’authentification spécifique offre Stellair
  • P12 : initialisation des connexion TLS avec le Téléservice INSi avec un certificat d’établissement p12
  • P12Multiple : permet la connexion TLS avec plusieurs certificats d’établissements p12
  • P12InHeader : permet lo connexion TLS avec le certificat P12 passé dans le header HTTP.

CPS

  • Mode de sécurité CPS, dans le fichier de configuration application.yml :
devbox-sante:
    insi:
        security.mode: cps
        # url: https://qualiflps.services-ps.ameli.fr/lps
        url: https://services-ps.ameli.fr/lps

Utiliser ce mode de sécurité pour l’utilisation du composant avec l’authentification par carte CPS.

P12

Ce mode de sécurité P12, permet le chargement d’un fichier p12 défini le fichier de configuration application.yml :

devbox-sante:
    insi:
        security.mode: p12
        # url: https://qualiflps-services-ps-tlsm.ameli.fr/lps
        url: https://services-ps-tlsm.ameli.fr/lps
        
        tls.p12:
            path:
                À_CHANGER_NOM_FICHIER.p12
            password:
                À_CHANGER_MOT_DE_PASSE_FICHIER.p12

Utiliser ce mode de sécurité pour l’utilisation du composant avec l’authentification par certificat serveur.

P12 Multiple

Ce mode de sécurité p12s permet de gérer en une seule installation l’ensemble des connexions des différents établissements géographiques/juridiques.

Un AmoP12Provider par défaut va charger un ensemble de fichier P12 à partir de la configuration, comme par exemple :

devbox-sante:
    insi:
        security.mode: p12s
        # url: https://qualiflps-services-ps-tlsm.ameli.fr/lpss
        url: https://services-ps-tlsm.ameli.fr/lps
            
        tls:
           p12:
             - 
               name: FINESS_ETAB_1-manu
               path: FINESS_ETAB_1_CERTIFICAT_MANU.p12
               password: À_CHANGER_MOT_DE_PASSE_FICHIER
             - 
               name: FINESS_ETAB_1-auto
               path: FINESS_ETAB_1E_CERTIFICAT_AUTO.p12
               password: À_CHANGER_MOT_DE_PASSE_FICHIER
             - 
               name: FINESS_ETAB_2-manu
               path: FINESS_ETAB_2_CERTIFICAT_AUTO.p12
               password: À_CHANGER_MOT_DE_PASSE_FICHIER

Il est toutefois possible de définir un autre AmoP12Provider, il suffit de configurer un nouvau Bean Spring avec une autre implémentation. Comme par exemple, une implémentation qui va charger le certificat en base de données :

 @Component
 public class FromDatabaseP12Provider implements AmoP12Provider {

    public AmoP12 getP12(String name) {
        // chargement en base de donnée des informations du certificat ayant pour nom name.
    }
 }

Pour charger dynamiquement un certificat il suffit de rajouter le nom du certificat (amoP12.name) dans le header de la requête HTTP :

curl -X GET "http://localhost:8584/insi/rechercheSansVitale" -H "accept: application/json" -H "amoP12.name: ÀPréciser"

P12 in header

Ce mode de sécurité, p12InHeader permet d’envoyer dans le header le certificat p12 et le password à la devbox-santé INSI. Ainsi l’appelant maîtrise la gestion de ces certificats.

Attention : Il est conseillé de mettre en place ce mode de sécurité seulement dans un environnement sécurisé

Pour le configurer :

devbox-sante:
    insi:
        security.mode: p12InHeader

Il faut donc rajouter deux header dans chaque requête HTTP :

  • amoP12.p12 contenant le p12 encodé en base 64
  • amoP12.password contenant le mot de passe du certificat p12

Jeu de test CNDA

Afin de pouvoir exécuter les tests d’injection demandées par le CNDA, il faut lancer le proxy avec l’un des profils spring activés suivant :

  • CNDA_WEB : rajoute un nouvel endpoint CNDA permettant l’injection des fichiers de test XML du CNDA. CNDA_injection_swagger.png
  • CNDA : rajoute un menu dans le TrayIcon du système d’exploitation permettant l’injection des fichiers de test XML du CNDA.

Exemple :

java -Dspring.profiles.active=CNDA_WEB -jar insi-proxy.jar

Vous pouvez également injecter la resource de votre choix à partir du moment où elle correspond au format de la réponse SOAP souhaitée :  CNDA_injection_swagger_file.png

Exemple de fichier soap.xml demandé : Reponse_numcasINSI_11_DateNaissance00_Annee.xml

Configuration de la sécurité

Le proxy insi est une application web Spring Boot, toutes les possibilités de spring-security sont donc disponibles.

Exemple de configuration par défaut empêchant toutes les IPs externes :

devbox-sante:
    security.forceLocalAddress: true

Surcharge les LpsInfo dans le proxy

La configuration du proxy contient les informations par défaut de configuration du LPS (Logiciel de Professionnel de Santé) 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
numero d’autorisation insi.lpsInfo.numeroAutorisation
nom du lps insi.lpsInfo.nom
version du LPS insi.lpsInfo.version

Par exemple :

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

Ainsi le client peut dynamiquement passer les informations du LPS.