EX_0.X-1070

Issue #33 new
Laurent Forêt created an issue

Le LPS doit être en capacité de valider le certificat serveur du SI DMP (pour les interfaces LPS) selon la norme PKIX (voir RFC3280 sur http://tools.ietf.org/html/rfc3280 et RFC5280 sur http://tools.ietf.org/html/rfc5280).

2017-12-07 17_58_32-DMP1_LPS_PDV homologation_20170316_DEVCOOP_IGC_v1.1.3_lfo.png

Official response

  • Laurent Forêt

    La DevBox-Santé DMP utilise les mécanismes décrits ici : https://doc.devbox-sante.fr/ms-sante/howtos/preuve_segur/#111-preuve

    La DevBox-sante a développé un IGCSanteTrustoreManager spécifique afin de prendre en compte les différentes IGC-Santé définies sur http://igc-sante.esante.gouv.fr/PC/ . Tous les composants DevBox-Sante comme la MSS peuvent être configurés de manière à accepter les certificats d’une ou plusieurs gammes. Comme par exemple, pour l’environnement de formation de Mailiz :

    devbox-sante:
      ms-sante:
        igcsante:
          gammes: ELEMENTAIRE_ORGANISATIONS, ELEMENTAIRE_ORGANISATIONS_TEST
    

    Le choix de cette gamme en configuration permet le téléchargement à la volée des certificat à ajouter au trust store lors de son lancement :

    for (IGCSanteGammeCertificat gammeCertificat : gammeCertificats) {
        log.info("Ajout du certificat {} au trustStore", gammeCertificat.getCertificatUrl());
        final X509Certificate certificat = _loadCertificate(gammeCertificat);
        _checkExpirationDate(certificat);
        trustStore.setCertificateEntry(gammeCertificat.getAlias(), certificat);
    }
    
    private X509Certificate _loadCertificate(IGCSanteGammeCertificat gammeCertificat) {
            URLConnection urlConnection = HttpHelper.noCheckCertificateOpenConnection(url);
            X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance(X_509).generateCertificate(urlConnection.getInputStream());
            if (certificate == null) {
                certificate = (X509Certificate) CertificateFactory.getInstance(X_509).generateCertificate(this.getClass().getClassLoader().getResourceAsStream(gammeCertificat.getCertificateFilename()));
            }
        }
        return certificate;
    }
    

Comments (3)

  1. Laurent Forêt reporter

    Le connecteur DMPC-API charge un trustore contenant le certificat X509 avec l'AC nécessaire lors de l'initialisation de la connexion TLS avec le serveur.

    Nous utilisons pour cela les magasins de certificat fournis par Java notamment "javax.net.ssl.TrustManagerFactory" et "java.security.KeyStore".

  2. Laurent Forêt

    La DevBox-Santé DMP utilise les mécanismes décrits ici : https://doc.devbox-sante.fr/ms-sante/howtos/preuve_segur/#111-preuve

    La DevBox-sante a développé un IGCSanteTrustoreManager spécifique afin de prendre en compte les différentes IGC-Santé définies sur http://igc-sante.esante.gouv.fr/PC/ . Tous les composants DevBox-Sante comme la MSS peuvent être configurés de manière à accepter les certificats d’une ou plusieurs gammes. Comme par exemple, pour l’environnement de formation de Mailiz :

    devbox-sante:
      ms-sante:
        igcsante:
          gammes: ELEMENTAIRE_ORGANISATIONS, ELEMENTAIRE_ORGANISATIONS_TEST
    

    Le choix de cette gamme en configuration permet le téléchargement à la volée des certificat à ajouter au trust store lors de son lancement :

    for (IGCSanteGammeCertificat gammeCertificat : gammeCertificats) {
        log.info("Ajout du certificat {} au trustStore", gammeCertificat.getCertificatUrl());
        final X509Certificate certificat = _loadCertificate(gammeCertificat);
        _checkExpirationDate(certificat);
        trustStore.setCertificateEntry(gammeCertificat.getAlias(), certificat);
    }
    
    private X509Certificate _loadCertificate(IGCSanteGammeCertificat gammeCertificat) {
            URLConnection urlConnection = HttpHelper.noCheckCertificateOpenConnection(url);
            X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance(X_509).generateCertificate(urlConnection.getInputStream());
            if (certificate == null) {
                certificate = (X509Certificate) CertificateFactory.getInstance(X_509).generateCertificate(this.getClass().getClassLoader().getResourceAsStream(gammeCertificat.getCertificateFilename()));
            }
        }
        return certificate;
    }
    

  3. Log in to comment