utilisation de openssl mod ssl - asip...

155
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l’ASIP Santé Version 3.2.0 du 31/03/2017

Upload: duongkhuong

Post on 14-Sep-2018

386 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

Utilisation de OpenSSL et de mod_ssl

avec les

cartes CPx

et les produits de certification

de l’ASIP Santé

Version 3.2.0 du 31/03/2017

Page 2: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

2 / 155

Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé

« ASIP Santé / PUSC / PSCE »

Version 3.2.0 du 31/03/2017

Documents de référence

ID Titre Auteur

[1] Guide de mise en œuvre d’une authentification forte avec une Carte de Professionnel de Santé (CPS) dans une application Web

ASIP Santé

[2] Guide de bonnes pratiques d’utilisation des listes de révocation des certificats à destination des éditeurs

ASIP Santé

[3] Documentation de l'IGC et des certificats CPS ASIP Santé

Page 3: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

Historique du document

Version Date Auteur Commentaires

2.7.0 12/11/2014 ASIP

Identifiant de clé sans-contact Exemples passés du volet CPS2Ter au volet CPS3 sur Cryptolib CPS v5 Limitation moteur SSL en sans-contact

2.7.1 06/05/2015 ASIP

Indication des corrections à apporter au moteur SSL en sans-contact Problème de signature / Unused bit Option de compilation -DOPENSSL_NO_SHA512

2.7.2 30/09/2015 ASIP Adaptation du document à la IGC-Santé

3.0.0 05/10/2015 ASIP

Utilisation de OpenSSL via mod_ssl (chapitre 12) Annexe carte CPx de test Annexe certificat SSL Annexe conception d’un site Web implémentant l’authentification par CPx

3.1.0 09/11/2016 ASIP

PFCNG -> IGC-Santé Commande de conversion de P12 en {key; certificat} Actualisation des CipherSuites BIG-IP de F5 Openssl s_client -servername (SNI)

3.2.0 31/03/2017 ASIP

BIG-IP de F5: Offload SSL Retrait de la documentation relative à CleoCPS Données des certificats CPS à traiter Certificat CPS et PHP

Page 4: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

4 / 155

1 Résumé OpenSSL est un ensemble de librairies permettant de réaliser des opérations cryptographiques de manière logicielle avec divers algorithmes (Blow Fish, DES ou Triple DES, DSA, RC4, RC5, RSA,…).

Les produits de certification de l’ASIP Santé étant conformes aux standards cryptographiques en vigueur, les certificats et les listes de révocations (Certificate Revocation List ou CRLs en anglais) émis par les IGCs de l’ASIP Santé sont exploitables directement via OpenSSL.

La carte CPx étant un « token » sécurisé, l’exploitation des clés privées d’authentification et de signature qu’elle contient n’est possible que par l’intégration de plug-ins appelés « moteurs » spécifiques à OpenSSL : ces « moteurs » permettent de réaliser des opérations cryptographiques externes depuis un module physique (typiquement un HSM, catégorie dans laquelle entre la carte à puce).

Ce document s’intéresse à un moteur PKCS#11 particulier appelé « engine_pkcs11 » qui permet d’accéder à la carte CPx par l’intermédiaire du module PKCS#11 fourni par l’ASIP Santé.

Ce document a pour objectifs d’expliquer comment:

utiliser OpenSSL dans le cadre des IGCs exploitées par l’ASIP Santé o IGC-CPS2bis (« Classes » 4 à 6, obsolète) o IGC-CPS2ter (« Classes » 0 à 3, obsolète) o IGC-Santé (en cours de déploiement depuis janvier 2016)

utiliser OpenSSL et la carte CPS avec le moteur PKCS#11 « engine_pkcs11 » pour accéder à la carte CPx et lui faire réaliser des opérations cryptographiques.

utiliser OpenSSL et mod_ssl pour faire une authentification Web par carte CPS sur un frontal Web Apache

utiliser BIG-IP de F5 (qui embarque une version dérivée de OpenSSL) pour faire une authentification Web par carte CPS sur un frontal F5

Page 5: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

5 / 155

2 Sommaire 1 Résumé ............................................................................................................................................ 4

2 Sommaire ........................................................................................................................................ 5

3 Glossaire .......................................................................................................................................... 8

4 Liste des entreprises citées ........................................................................................................... 10

5 Avertissements .............................................................................................................................. 11

6 Audience ........................................................................................................................................ 12

7 Prérequis ....................................................................................................................................... 12

8 Présentation de OpenSSL .............................................................................................................. 13

9 Utilisation de OpenSSL pour la vérification du statut des certificats émis par les IGCs de l’ASIP Santé ...................................................................................................................................................... 14

9.1 Les rôles des certificats AC des IGCs de l’ASIP Santé ............................................................ 14 9.2 Principe général de vérification du statut d’un certificat avec une CRL ............................... 15 9.3 Schémas illustrant la vérification du statut des certificats émis par les IGCs de l’ASIP Santé 16

9.3.1 Vérification du statut des certificats Classe 4, 5 et 6 de l’ASIP Santé ........................... 16 9.3.2 Vérification du statut des certificats Classe 0, 1, 2 et 3 de l’ASIP Santé ....................... 18 9.3.3 Vérification du statut des certificats IGC-Santé de l’ASIP Santé ................................... 19

9.4 Vérification de la version d’OpenSSL courante ..................................................................... 20 9.5 ASN.1 versus PEM .................................................................................................................. 20 9.6 Validation « classique » ......................................................................................................... 22 9.7 Le principe de vérification des statuts des certificats ASIP Santé avec OpenSSL .................. 23

9.7.1 Ligne de commande ...................................................................................................... 24 9.7.2 Résultats possibles ........................................................................................................ 24

9.8 Vérification complète ............................................................................................................ 25 9.9 Intégration de la vérification ................................................................................................. 27

9.9.1 Par tâche programmée .................................................................................................. 27 9.9.2 Dans une application ..................................................................................................... 27

9.10 Vérification complète avec OpenSSL patché ......................................................................... 28

10 Utilisation de OpenSSL en tant que client HTTPS .......................................................................... 29 10.1 Authentification simple du serveur ....................................................................................... 29 10.2 Authentification mutuelle avec un certificat client logiciel................................................... 29 10.3 Consommation du flux HTTP ................................................................................................. 30

11 Utilisation de la carte CPS avec le moteur PKCS#11 OpenSC pour OpenSSL ................................ 31 11.1 Prérequis « accès CPx » : identification du module PKCS#11 de l’ASIP Santé ...................... 31

11.1.1 Environnement Microsoft Windows ............................................................................. 31 11.1.2 Environnement Linux..................................................................................................... 31 11.1.3 Environnement Apple Mac OS X ................................................................................... 32

11.2 Prérequis « Extension OpenSC pour OpenSSL » : récupération et installation du moteur PKCS#11 OpenSC ............................................................................................................................... 32 11.3 Chargement du moteur PKCS#11 OpenSC ............................................................................ 33

11.3.1 Principe du chargement ................................................................................................ 33 11.3.2 A partir d’un fichier de la ligne de commande .............................................................. 34 11.3.3 A partir d’un fichier de configuration ............................................................................ 35 11.3.4 Vérification .................................................................................................................... 36

11.4 Commandes OpenSSL ............................................................................................................ 37

Page 6: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

6 / 155

11.4.1 Liste des commandes .................................................................................................... 37 11.4.2 Description des paramètres communs ......................................................................... 37

11.5 Exemples de commandes OpenSSL utilisant la CPx via le moteur PKCS#11 OpenSC ........... 39 11.5.1 Génération d’une requête de certificat signée avec le certificat de signature de la carte CPx 39 11.5.2 Signature d’un mail avec une carte CPx ........................................................................ 40 11.5.3 Génération d’un nombre pseudo-aléatoire à partir de la carte CPx ............................. 40 11.5.4 Connexion à un serveur sécurisé avec SSL .................................................................... 41 11.5.5 Hachage et signature d’un fichier ................................................................................. 42 11.5.6 Test de performances de l’algorithme de hachage ....................................................... 42 11.5.7 Signature d’une requête de demande de certificat ...................................................... 43

11.7 Utilisation en sans-contact .................................................................................................... 44 11.8 Restriction d’usage – limites ................................................................................................. 45

12 Problème « unused bit non nul sur le champ de signature des certificats CPx » aka « unused bit » 46

12.1 Symptômes ............................................................................................................................ 46 12.2 Causes du problème .............................................................................................................. 46 12.3 Lien avec OpenSSL ................................................................................................................. 46 12.4 Versions d’OpenSSL concernées ........................................................................................... 47 12.5 Correction .............................................................................................................................. 48

12.5.1 Mise à disposition .......................................................................................................... 48 12.5.2 Application ..................................................................................................................... 48 12.5.3 Compilation ................................................................................................................... 48 12.5.4 Intérêts .......................................................................................................................... 48 12.5.5 Analyse .......................................................................................................................... 48 12.5.6 Correction sous BIG-IP de F5 ......................................................................................... 49

13 Utilisation de OpenSSL comme bibliothèque ................................................................................ 50 13.1 Avertissement ....................................................................................................................... 50 13.2 Présentation .......................................................................................................................... 50 13.3 Exemples de code .................................................................................................................. 51

13.3.1 Exemple de fonction permettant le chargement du module PKCS#11......................... 51 13.3.2 Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL 52 13.3.3 Exemple de fonction permettant la récupération d’une clé publique de la carte CPx . 54

14 Utilisation d’OpenSSL en HTTPS au travers de mod_ssl ............................................................... 56 14.1 Cadre d’utilisation ................................................................................................................. 56 14.2 Principe de l’authentification mutuelle ................................................................................. 57 14.3 De la prise en main à la mise en production : un projet d’intégration complet ................... 58

14.3.1 Compétences requises .................................................................................................. 58 14.3.2 Prise en main / PoC ....................................................................................................... 59

14.4 Prise en main / PoC ............................................................................................................... 61 14.4.1 « Brief project » ............................................................................................................. 61 14.4.2 Ressources ..................................................................................................................... 62 14.4.3 Livrables ......................................................................................................................... 63 14.4.4 Tâches techniques à réaliser ......................................................................................... 64 14.4.5 Macro-Planning ............................................................................................................. 65 14.4.6 Remarques ..................................................................................................................... 67

14.5 Configuration de OpenSSL sous Linux ................................................................................... 68 14.5.1 Outils nécessaires .......................................................................................................... 68 14.5.2 Privilèges ........................................................................................................................ 69

Page 7: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

7 / 155

14.5.3 Répertoire de base pour les installations ...................................................................... 69 14.5.4 Préparation de l’environnement ................................................................................... 69 14.5.5 Installation d'OpenSSL ................................................................................................... 70 14.5.6 Problème « TLS 1.2 » ..................................................................................................... 72

14.6 Serveur Apache HTTPD sous Linux ........................................................................................ 81 14.6.1 Systèmes de référence .................................................................................................. 81 14.6.2 Archives de sources ....................................................................................................... 81 14.6.3 Compilation et installation ............................................................................................ 81 14.6.4 Logique de configuration du serveur ............................................................................ 83

14.7 Configuration de mod_ssl pour l’authentification du serveur .............................................. 83 14.7.1 Obtention d’un bi-clé pour l’authentification du serveur SSL ....................................... 84 14.7.2 Configuration de Apache HTTPD / mod_ssl pour l’authentification du serveur ........... 85 14.7.3 Vérification de la configuration ..................................................................................... 86

14.8 Configuration de mod_ssl pour l’authentification du client ................................................. 87 14.8.1 Activation de l’authentification par carte CPx sans vérification des CRLs .................... 87 14.8.2 Vérification de la configuration ..................................................................................... 88 14.8.3 Gestion des CRLs ASIP Santé ......................................................................................... 89

14.9 Récapitulatif des directives Apache utilisées ........................................................................ 96

15 Annexe – Serveur Microsoft IIS ................................................................................................... 103 15.1 Installation ........................................................................................................................... 103

15.1.1 Configuration de IIS 5 .................................................................................................. 103 15.1.2 Configuration de IIS 7 .................................................................................................. 104

16 Annexe – Résumé des points de configuration importants pour les serveurs BIG-IP de F5 ....... 107 16.1 Gestion des CRLs ASIP Santé sous BIG-IP ............................................................................ 107 16.2 Activation de TLS 1.2 avec un frontal sous BIG-IP ............................................................... 107 16.3 Correction du problème "unused bit" sous BIG-IP de F5 .................................................... 107 16.4 Gestion des chaines de certificats signées SHA2 sous BIG-IP de F5 [IGC-Santé] ................ 108 16.5 Offload SSL avec un serveur BIG-IP de F5............................................................................ 108

17 Annexe – Obtention de cartes CPx de test .................................................................................. 109

18 Annexe – Obtention de certificats SSL Serveurs ......................................................................... 109 18.1 Certificats du « Commerce » ou issus d’une PKI interne .................................................... 109 18.3 Certificats Serveur ASIP Santé: "IGC-Santé SSL_SERV" ....................................................... 109

18.3.1 "Certificats serveur" de test ........................................................................................ 109 18.3.2 "Certificats serveur" de production............................................................................. 109 18.3.3 La PFCNG: plate-forme de retrait en ligne des certificats logiciels IGC-Santé ............ 111

18.4 Configuration des postes clients se connectant vers un serveur présentant un certificat "Certificats serveur" ASIP Santé ...................................................................................................... 112

19 Annexe – Conception d’un site Web utilisant l’authentification CPx: les grandes lignes ........... 113 19.1 Expression du besoin ........................................................................................................... 114 19.2 Diagnostic technique sur la base de l’expression de besoin ............................................... 116 19.3 Exemple d’application Web exploitant la CPx sous Microsoft Windows ............................ 119

19.3.1 Microsoft Internet Explorer ......................................................................................... 119 19.3.2 Mozilla Firefox ............................................................................................................. 130 19.3.3 Google Chrome ............................................................................................................ 131

19.4 Exemple d’application Web exploitant la CPx sous Apple Mac OS X .................................. 132 19.4.1 Apple Safari ................................................................................................................. 132 19.4.2 Mozilla Firefox ............................................................................................................. 132 19.4.3 Google Chrome ............................................................................................................ 136

19.5 Configurations testées ......................................................................................................... 139

Page 8: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

8 / 155

19.5.1 Configuration Apache 1 ............................................................................................... 139 19.5.2 Configuration Apache 2 ............................................................................................... 141 19.5.3 Configuration Apache 3 ............................................................................................... 141 19.5.4 Détails techniques de l’exemple (configuration Apache 1)......................................... 142 19.5.5 Reste à faire sur la configuration Apache utilisée (configuration Apache 1) .............. 144 19.5.6 Configurations utilisées en configuration Apache 1 .................................................... 145

20 Annexe – Données des certificats CPS à traiter lors d'une authentification web mutuelle par CPS 146

20.1 Informations récupérables via les variables d'environnement Apache/mod_ssl ............... 146 20.2 Normes des informations récupérées depuis un certificat CPS .......................................... 146 20.3 CN/PS_IdNat: seule information du certificat à traiter ....................................................... 148

21 Annexe – Récupération du certificat CPS en PHP ....................................................................... 148

22 Annexe – Messages d'erreur Apache .......................................................................................... 149

23 Annexe – Liste des tables ............................................................................................................ 150

24 Annexe – Liste des figures ........................................................................................................... 153

25 Notes ........................................................................................................................................... 154

3 Glossaire

Abréviation Signification

AC Autorité de Certification

ACR Autorité de Certification Racine

ACI Autorité de Certification Intermédiaire

ASIP Santé Agence des systèmes d'information Partagés de Santé

ASN.1 Abstract Syntax Notation One

CPx Carte de la famille CPS (CPS, CPE, CPA, …)

CRL Certificate Revocation List

CSA Certificat Serveur Applicatif

DER Distinguished Encoding Rules

DLL Dynamic Link Library

DN Distinguished Name

HTTP Hypertext Transfer Protocol

IGC Infrastructure de Gestion de Clés

LDAP Lightweight Directory Access Protocol

PEM Privacy Enhanced Mail

Page 9: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

9 / 155

Abréviation Signification

PFCNG Plate-Forme de Certification Nouvelle Génération: Plate-Forme technique de délivrance des produits de certification émis par l'IGC-Santé

PKCS Public Key Cryptography Standards

PKI Public Key Infrastructure

PKIX Public Key Infrastructure X.509

RSA Rivest Shamir Adleman

SSL Secure Socket Layer

TLS Transport Layer Security

Tableau 1 : Glossaire

Page 10: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

10 / 155

4 Liste des entreprises citées Le présent document cite les produits des entreprises ou organismes suivants:

Nom Site Web Lien avec le document

Apple www.apple.com Apple Mac OS X

Dovecot https://www.dovecot.org/ Distributeur du serveur d'email Dovecot

F5 https://f5.com/ Fabriquant de BIP-IP

Microsoft www.microsoft.com Microsoft Windows 7

OASIS www.oasis-open.org Responsable des évolutions du Standard PKCS#11 depuis sa version 2.3

OpenSC https://github.com/OpenSC/ Outils et librairies pour la carte à puce

OpenSSL www.openssl.org Implémentation libre des protocoles SSL et TLS

Tableau 2 : Entreprises citées

Page 11: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

11 / 155

5 Avertissements

Sur le nécessaire strict respect des procédures décrites dans le manuel L’attention de l’utilisateur est attirée sur l’importance de respecter strictement les procédures décrites dans le présent manuel. Toutes les procédures qui y sont décrites ont été préalablement testées par l’ASIP Santé. Elles doivent permettre à l’utilisateur d’utiliser les certificats ASIP Santé avec OpenSSL. En cas de non-respect de ces procédures et des conditions normales d’utilisation d’OpenSSL, sa mise en œuvre est susceptible d’engendrer des dysfonctionnements dans l’environnement de travail de l’entreprise. En cas de dysfonctionnement, quel qu’il soit, l’ASIP Santé prêtera dans la mesure du possible assistance à l’utilisateur, qui ne pourra rechercher sa responsabilité en cas de non-respect des procédures décrites dans le présent manuel.

Sur les liens externes Le présent manuel contient des liens vers des sites Internet. Ces liens ne visent qu'à informer l’utilisateur. Ces sites Web ne sont pas gérés par l'ASIP Santé et l'ASIP Santé n’exerce sur eux aucun contrôle : leur mention ne saurait engager l’ASIP Santé quant à leur contenu. L'utilisation des sites tiers mentionnés relève de la seule responsabilité du lecteur ou de l'utilisateur des produits documentés.

Sur les copies d’écran et les lignes de commande Les lignes de commandes données ci-après le sont à titre indicatif. Elles documentent des cas « passants » qui peuvent différer d’un système à l’autre. Les copies d’écran présentées dans ce document sont données à titre illustratif. Les pages ou écrans réellement affichés peuvent être différents, notamment en raison de montées de version ou de configurations d’environnements différentes.

Citations L’ASIP Santé est contrainte de citer le nom de certaines entreprises recensées au tableau n°2 afin d’apporter toute l’aide nécessaire aux utilisateurs. Les entreprises citées peuvent prendre contact avec l’ASIP Santé à l’adresse email [email protected] pour toute demande en lien avec la citation les concernant. Les entreprises non citées dans ce manuel et ayant une activité en lien avec OpenSSL et les IGC de Santé peuvent également se faire connaître auprès de l’ASIP Santé en la contactant à la même adresse.

Contact Toute question en rapport avec le contenu du présent manuel doit être adressée à l’adresse suivante: [email protected]

Tableau 3 : Avertissements

Page 12: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

12 / 155

6 Audience Ce documente s’adresse

à des développeurs C/C++, ingénieurs systèmes Linux ou des architectes SI :

familiarisés avec la PKI

désireux de mettre en œuvre la CPx dans leurs applications ou sur leurs serveurs

à des chefs de projets désireux

de faire évaluer l’intégration de la PKI ASIP Santé dans leurs applications par leurs équipes techniques

de suivre au mieux l’intégration de la PKI ASIP Santé avec leurs équipes techniques

7 Prérequis

# Prérequis Détails

1 Système d’exploitation

Microsoft Windows (Windows 7 ou supérieur)

Linux

Mac OS X

2 Lecteur de cartes à puce PSS ou PC/SC Physiquement connecté au poste de travail Et fonctionnel (pilote installé)

3 Carte CPx Non bloquée Non expirée Code porteur connu

4 Cryptolib CPS La Cryptolib CPS v5 ou supérieure (en particulier la librairie PKCS#11 de l’ASIP Santé) doit être installée et correctement configurée

5 OpenSSL Version récente d’OpenSSL (version 1.0.1g+)

Tableau 4 : Prérequis

Page 13: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

13 / 155

8 Présentation de OpenSSL OpenSSL peut s’utiliser de 3 manières différentes :

1. Par ligne de commandes, 2. Comme bibliothèque (API) pour langage C, 3. Par intégration à d’autres langages (PHP, perl)

Ce document s’intéresse à l’utilisation d’OpenSSL en ligne de commandes ainsi que sous forme de bibliothèques utilisées dans une application C sous les environnements Windows, Linux et Mac OS X.

L’utilisation d’OpenSSL en tant que bibliothèque permet d’exploiter pleinement toutes les fonctions offertes par ce logiciel.

L’utilisation d’OpenSSL par ligne de commandes est détaillée car son utilisation est plus souple, plus simple et plus répandue.

L’intérêt du moteur PKCS#11 d’OpenSSL pour la carte CPx est :

1. Utilisation de la clé de signature de la carte pour signer des fichiers. 2. Utilisation de la clé d’authentification de la carte pour s’authentifier auprès d’un serveur

sécurisé (par exemple SSL).

Page 14: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

14 / 155

9 Utilisation de OpenSSL pour la vérification du statut des certificats émis par les IGCs de l’ASIP Santé

À partir d’OpenSSL v1.0.1, OpenSSL a amélioré la façon dont il vérifie les listes de révocations (Certificate Revocation List ou CRLs en anglais).

Les CRLs de l’ASIP Santé ne sont toutefois toujours pas bien gérées (en tout cas avec la dernière version parue en date d’édition de ce document).

Deux méthodes permettent toutefois d’utiliser les CRLs ASIP Santé avec OpenSSL v1.0.1

1. Sans patch OpenSSL 2. Avec patch OpenSSL

Ce document illustre la première méthode.

9.1 Les rôles des certificats AC des IGCs de l’ASIP Santé Hormis les « classes » (de 0 à 6) ou les « gammes » (faible, élémentaire, forte avec l'IGC-Santé) de certificats et leurs positions (finale, intermédiaire, racine) dans la chaîne, on trouve des certificats ASIP Santé de 3 types différents :

1. Des certificats destinés à la signature de certificats seulement o Désignés sous le terme « CertSign »

2. Des certificats destinés à la signature de CRLs seulement o Désignés sous le terme « CRLSign »

3. Des certificats destinés à la signature de certificats et de CRLs o Désignés sous le terme « CertSign + CRLSign »

Ces 3 types de certificats sont distinguables les uns des autres en consultant l’extension « Utilisation de la clé » (KeyUsage) présente dans tous les certificats de l’ASIP Santé :

Vérification des rôles des certificats ASIP Santé

Figure 1 : Signature de certificats

Figure 2 : Signature de CRLs Figure 3 : Signature de certificats et de CRLs

Page 15: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

15 / 155

9.2 Principe général de vérification du statut d’un certificat avec une CRL

Lors de la vérification d’un certificat, le vérificateur

1. construit la chaîne de confiance correspondante (Autorités de Certification Racine et Intermédiaire)

a. démarche « bottom-up » 2. vérifie qu’elle est « de confiance » 3. vérifie que tous les certificats de la chaîne sont valides à la date du jour 4. vérifie qu’ils ne sont pas révoqués en analysant les CRL correspondantes

a. démarche « top-down »

En particulier, pour les CRLs « déléguées » ASIP Santé, il est nécessaire de vérifier que:

Les CRLs sont valides à la date du jour

Les CRLs sont correctement signées

Les CRL ont l’attribut AuthorityKeyID renseigné

Les AC de signature des CRL ont « CRLSign » pour KeyUsage

Les AC de signature de certificat et les AC de signature de CRL ont les mêmes SubjectDN et IssuerDN

La CRL de l’ACR est signée par l’ACR Le nombre d’ACI dépend de chaque PKI :

une seule ACI quelle que soit la Classe pour les IGC de Santé

plusieurs ACI pour des PKI comme Thawte Le nombre de vérifications intermédiaires peut donc varier avec le nombre d’ACI des chaines considérées.

Page 16: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

16 / 155

9.3 Schémas illustrant la vérification du statut des certificats émis par les IGCs de l’ASIP Santé

Dans ce qui suit, les symboles suivants sont utilisés et combinés :

Figure 4 : Légende

Les mentions présentes au centre des figures permettent de distinguer les rôles de chaque instance.

9.3.1 Vérification du statut des certificats Classe 4, 5 et 6 de l’ASIP Santé

L’autorité racine « GIP-CPS » possède deux certificats : un pour la signature de CRL et un autre pour la signature de certificats.

Cette particularité conforme aux normes en vigueur (section § 5.1.1.3 de la RFC 5280) mais peu implémentée explique les difficultés que rencontrent les produits du marché grand public (Microsoft Windows, OpenSSL ou Apache 2.2 par exemple) à vérifier correctement les CRLs de l’ASIP Santé.

Pour les Classes 4 (« certificats serveurs applicatifs » ou « CSA »), 5 (certificats de confidentialité) et 6 (certificats des frontaux de l’Assurance Maladie), l’autorité intermédiaire possède un certificat (valable pour la signature de CRLs et pour la signature de certificats).

AC racine AC intermédiaire Entité Finale

Certificat CRL

Ex. : Certificat correspondant

à une autorité racine

Formes = personnes

morales ou physiques

Couleurs = niveau hiérarchique

racine intermédiaire final

Page 17: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

17 / 155

Le principe de signature des certificats et des CRLs Classe 4 de l’ASIP Santé est le suivant :

Figure 5 : Vérification des CRLs Classe 4 ASIP Santé

Ceci permet d’identifier les actions à mener pour vérifier l’état de révocation d’un certificat de Classe 4, 5 ou 6 :

Il faudra vérifier quatre certificats dans deux CRLs associées.

Entité finale

Autorité intermédiaire

Autorité racine

Garantit

Garantit

signe

signe

Certificat

Entité Final

ACI CertSign +

CRLSign

ACR CertSign

Matérialisée par

Matérialisée par

Matérialisée par

Matérialisée par

ACR CRLSign

ACR CRL

ACI CRL

signe

A vérifier avec

signe

signe

A vérifier avec

Page 18: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

18 / 155

9.3.2 Vérification du statut des certificats Classe 0, 1, 2 et 3 de l’ASIP Santé

Pour les Classes 0, 1, 2 et 3, l’autorité intermédiaire possède elle aussi deux certificats : un pour la signature de CRLs et un autre pour la signature de certificats.

Le principe de signature des certificats et des CRLs Classe 0, 1, 2 et 3 de l’ASIP Santé est alors le suivant :

Figure 6 : Vérification des CRLs Classe 0, 1, 2 et 3 ASIP Santé

Ceci permet d’identifier les actions à mener pour vérifier l’état de révocation d’un certificat Classe 0, 1 , 2, ou 3 :

Il faudra vérifier cinq certificats dans deux CRLs associées.

Entité finale

Autorité intermédiaire

Autorité racine

Garantit

Garantit

signe

signe

Certificat

Entité Final

ACI CertSign

ACR CertSign

Matérialisée par

Matérialisée par

Matérialisée par

Matérialisée par

ACR CRLSign

ACR CRL

ACI CRL

signe

A vérifier avec

signe

A vérifier avec

ACI CRLSign signe

Matérialisée par

Page 19: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

19 / 155

9.3.3 Vérification du statut des certificats IGC-Santé de l’ASIP Santé

L'IGC-Santé remplace les IGC de Santé 2bis (Classes 4, 5 et 6) et 2Ter (Classes 0, 1, 2 et 3).

L'IGC-Santé est présentée dans des documents dédiés. Pour ce qui concerne le présent document, il faut retenir que la simplifie l’arborescence de signature. Le principe de signature des certificats et des CRLs IGC-Santé de l’ASIP Santé est le suivant :

Figure 7 : Vérification des CRLs ASIP Santé avec la IGC-Santé

Ceci permet d’identifier les actions à mener pour vérifier l’état de révocation d’un certificat IGC-Santé:

Il faudra vérifier cinq certificats dans deux CRLs associées.

IGC-Santé Les CRLs sont désormais signées avec le même bi-clé que celui ayant signé le certificat associé.

Tableau 5 : IGC-Santé: Simplification de la vérification de statut de certificat

IGC-Santé Les indications présentées dans la suite du document restent valables en IGC-Santé.

Tableau 6 : IGC-Santé: Indications présentées dans le présent document valides

signe

signe

Entité finale

Autorité intermédiaire

Autorité racine

Garantit

Garantit

signe

signe

Certificat

Entité Final

ACI CertSign +

CRLSign

Matérialisée par

Matérialisée par

Matérialisée par

ACR CertSign

+ CRLSign + CRLSign

ACR CRL

ACI CRL

A vérifier avec

A vérifier avec

Page 20: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

20 / 155

9.4 Vérification de la version d’OpenSSL courante

openssl version OpenSSL 1.0.1g 7 Apr 2014

Tableau 7 : OpenSSL : vérification de la version courante

Pour tout ce qui suit, la documentation pertinente est :

https://www.openssl.org/docs/apps/verify.html

9.5 ASN.1 versus PEM Les certificats et les CRLs de l’ASIP Santé publiés via LDAP ou le portail annuaire.asipsante.fr sont émis au format ASN.1 (binaire).

Les extensions de fichiers (p7b, cer, crt, pem, der, crl…) ne sont pas significatives :

Sous windows elles sont certes associées à des fonctions o ouverture du viewer de certificat o lancement de wizard d’import…

mais seul le format réel, qui peut être soit ASN.1 soit PEM, est important.

ASN.1 vs PEM

Figure 8 : Root CA ASIP Santé au format DER Figure 9 : Root CA ASIP Santé au format PEM

Tableau 8 : DER versus PEM

Page 21: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

21 / 155

Le format ASN.1 DER (Distinguished Encoding Rules) est un format « optimisé » par rapport au format BER (Basic Encoding Rules). Le format DER est préconisé par les RFC.

Toutefois c’est à l’IGC de respecter le format d’encodage des certificats, les applications consommatrices ne doivent pas vérifier le format. En outre, une application doit vérifier la signature d’un certificat tel qu’elle l’a reçu.

Un fichier ASN.1 peut être converti en PEM et vice versa via des outils « communs » et notamment par OpenSSL :

Conversion d’un certificat ou d’une CRL du format DER vers PEM

%OPENSSL_HOME%\openssl.exe {x509|crl}

https://www.openssl.org/docs/apps/x509.html https://www.openssl.org/docs/apps/crl.html

Certificat X.509 ou CRL

-inform der Format du fichier d’entrée : DER (ASN.1)

-in "certificate.cer" Fichier d’entrée

-outform pem Format du fichier de sortie : PEM

-out "certificate.pem" Fichier de sortie

Tableau 9 : OpenSSL : Conversion d’un certificat ou d’une CRL du format DER vers PEM

Page 22: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

22 / 155

9.6 Validation « classique » Exemple avec un certificat final ASIP Santé Classe 3 :

Premier essai avec un certificat final ASIP Santé Classe 3

openssl verify -verbose https://www.openssl.org/docs/apps/verify.html

-CAfile all-asip-certificates.pem tous les certificats intermédiaires et racines de l’ASIP Santé

-CRLfile GIP-CPS_CLASSE-3.pem CRL de l’ASIP Santé Classe 3

-crl_check vérification de certificat avec vérification de CRL

-extended_crl activer les fonctionnalités étendues de CRL

-use_deltas activer le support des deltas CRLs

certificat-classe-3.pem certificat Classe 3 à vérifier

Tableau 10 : OpenSSL et CRL ASIP Santé : premier essai

Résultat premier essai avec un certificat final ASIP Santé Classe 3

certificat-classe-3.pem: C = FR, O = GIP-CPS, L = Paris (75), OU = 318751275100020, CN = 123456789100000/0000000FFF + SN = NOM01 + GN = PRENOM01 error 3 at 0 depth lookup:unable to get certificate CRL

Tableau 11 : OpenSSL et CRL ASIP Santé : résultat du premier essai

Cette erreur est “normale”: elle est due à la clé utilisée pour la signature des CRLs de l’ASIP Santé. En effet, certaines 1 listes de révocation émises par les IGCs de l'ASIP Santé sont signées avec une clé distincte de celle qui a été utilisée pour signer les certificats, même si les deux clés appartiennent à la même autorité de certification (AC). Cette approche est décrite dans la section § 5.1.1.3 de la RFC 5280 mais n’est pas « gérée » par OpenSSL même après activation de l’option « extended_crl ».

1 Les CRLs émises par l’ACR de l’IGC-CPS2bis,

Les CRLs émises par les ACR et les ACI de l’IGC-CPS2ter.

Page 23: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

23 / 155

9.7 Le principe de vérification des statuts des certificats ASIP Santé avec OpenSSL

Le principe du paramétrage d’OpenSSL pour vérifier les CRLs ASIP Santé avec un OpenSSL 1.0.1 ou supérieur non patché est le suivant :

# Description

1 Regrouper les certificats d’autorité pour la signature de certificats au format PEM dans un même fichier passé à l’option « CAfile ».

2 Utiliser l’option « extended_crl » qui active l’utilisation par OpenSSL du fichier passé en paramètre de « untrusted ».

3 Regrouper les certificats d’autorité pour la signature de CRLs au format PEM dans un même fichier passé à l’option « untrusted ».

4 Fournir tous les certificats (racines et intermédiaires) : fournir seulement les certificats intermédiaires ne suffit pas.

5 Utiliser l’option « crl_check », et non l’option « crl_check_all » : l’option « crl_check_all » ne marche que dans le scénario 2 « OpenSSL patché ».

6 Vérifier toutes les CRLs de la chaîne les unes après les autres en partant des CRLs « du haut » : la vérification des CRLs est « top-down » : CRL émise et signée par l’ACR puis CRL émise et signée par l’ACI).

7 L’option « use_deltas » permet la prise en compte des deltas CRLs.

Tableau 12 : Principe de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché

Page 24: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

24 / 155

9.7.1 Ligne de commande

La ligne de commande à appliquer devient dès lors :

Vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché

openssl verify -verbose https://www.openssl.org/docs/apps/verify.html

-CAfile prod-cer.pem Certificats ASIP Santé racine et intermédiaire de signature de certificats

-untrusted prod-crl.pem Certificats ASIP Santé racine et intermédiaire de signature de CRLs

-CRLfile GIP-CPS_CLASSE-3.pem CRL de l’ASIP Santé Classe 3

-crl_check vérification de certificat avec vérification de CRL

-extended_crl activer les fonctionnalités étendues de CRL

-use_deltas activer le support des deltas CRLs

certificat-classe-3.pem certificat Classe 3 à vérifier

Tableau 13 : Ligne de commande de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché

9.7.2 Résultats possibles

Les résultats peuvent être :

Résultat Description Remarques

certificat-classe-3.pem: OK vérification d’un certificat non expiré et non révoqué

N/A

error 10 at 0 depth lookup:certificate has expired OK

vérification d’un certificat expiré mais non révoqué

N/A

error 11 at 0 depth lookup:CRL is not yet valid OK

vérification avec une CRL émise après la date (locale) du poste et un certificat non révoqué

N/A

error 23 at 0 depth lookup:certificate revoked

vérification certificat client révoqué

N/A

error 12 at 0 depth lookup:CRL has expired

vérification avec une CRL expirée

N/A

error 2 at 1 depth lookup:unable to get issuer certificate

Erreur de paramétrage de OpenSSL

mettre les certificats racines et intermédiaires dans CAfile et untrusted

error 3 at 0 depth lookup:unable to get certificate CRL

Erreur de paramétrage de OpenSSL

mettre les certificats racines et intermédiaires dans CAfile et untrusted, utiliser untrusted et extended_crl

Tableau 14 : Résultats de la vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché

Page 25: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

25 / 155

9.8 Vérification complète A ce stade, les vérifications effectuées sont :

# Points vérifiés par le « OpenSSL verify crl_check » sur un certificat final

1 La validité de la signature du certificat client par l’AC intermédiaire de signature de certificat

2 La validité de la signature de l’AC intermédiaire de signature de certificat par l’AC racine de signature de certificat

3 La validité de la signature de l’AC racine de signature de certificat par l’AC racine de signature de certificat (auto signée)

4 La validité de la signature de la CRL cliente par l’AC intermédiaire de signature de CRL

5 La validité de la signature de l’AC intermédiaire de signature de CRL par l’AC racine de signature de CRL

6 La validité de la signature de l’AC racine de signature de CRL par l’AC racine de signature de CRL (auto signée)

7 La validité (non-expiration) du certificat client par rapport à la date du poste

8 La non-révocation du certificat client

Tableau 15 : Points vérifiés par le « OpenSSL verify crl_check » sur un certificat final

Il manque les vérifications de non révocation des certificats intermédiaires et racine de signature de certificats et de CRL :

1. validité des chaînes de certificats associées 2. de leurs CRLs associées 3. et des états de ces certificats dans leurs CRLs associées

Page 26: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

26 / 155

La ligne de commande complète est donc :

Exemple pour une vérification de certificat Classe 4

openssl verify -verbose https://www.openssl.org/docs/apps/verify.html

-untrusted %PKI_ASIP_CERT_FOLDER%prod-crl.pem Certificats intermédiaires et racines de signature de CRLs

-CAfile %PKI_ASIP_CERT_FOLDER%prod-cer.pem Certificats intermédiaires et racines de signature de certificats

-CRLfile %CRL_FOLDER%bag-crl.pem CRL ASIP Santé

-crl_check vérification de certificat avec vérification de CRL

-extended_crl activer les fonctionnalités étendues de CRL

-use_deltas activer le support des deltas CRLs

%PKI_ASIP_CERT_FOLDER%root-cer.pem Root CA GIP-CPS de signature de certificats

%PKI_ASIP_CERT_FOLDER%root-crl.pem CA GIP-CPS intermédiaire de signature de CRL

%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-cer.pem Certificat intermédiaire de signature de certificats Classe X (X = {0, 1, 2, 3, 4})

%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-crl.pem

Certificat intermédiaire de signature de CRL Classe X (X = {0, 1, 2, 3, 4}) (pour X = 4, inter-ac-classe-X-cer.pem = inter-ac-

classe-X-crl.pem)

%CRT_FOLDER%certificat-classe-X.pem Certificat final Classe X à vérifier

Tableau 16 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 non patché

Le résultat de cette unique commande doit être du type suivant :

root-cer.pem: OK root-crl.pem: OK inter-ac-classe-X-cer.pem: OK inter-ac-classe-X-crl.pem: OK certificat.pem: OK

Tableau 17 : Résultat de la ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 non patché

Page 27: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

27 / 155

9.9 Intégration de la vérification

9.9.1 Par tâche programmée

Avec Cron (Linux) ou Taskscheduler (Windows)

9.9.2 Dans une application

Avec CreateProcess (application native) ou ProcessBuilder (Java) et analyse de %errorlevel%

Page 28: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

28 / 155

9.10 Vérification complète avec OpenSSL patché

Ce document ne traite pas de patching de OpenSSL : cette opération est à réaliser par ailleurs. Ce paragraphe est donné à titre indicatif et ne concerne plus la IGC-Santé.

Exemple pour une vérification de certificat Classe 4

OpenSSL non patché OpenSSL patché

openssl verify -verbose https://www.openssl.org/docs/apps/verify.html

openssl verify -verbose

-untrusted %PKI_ASIP_CERT_FOLDER%prod-crl.pem

Certificats intermédiaires de signature de CRLs

Le magasin untrusted n’est pas nécessaire

N/A

-CAfile %PKI_ASIP_CERT_FOLDER%prod-cer.pem

Certificats intermédiaires et racines de signature de certificats

Certificats intermédiaires et racines de signature de CRLs et de certificats

-CAfile %PKI_ASIP_CERT_FOLDER%prod-

cer.pem

-CRLfile %CRL_FOLDER%bag-crl.pem CRLs ASIP Santé -CRLfile %CRL_FOLDER%bag-crl.pem

-crl_check Seul crl_check fonctionne

Les 2 options crl_check ou crl_check_all fonctionnent

-crl_check | -crl_check_all

-extended_crl Le patch peut être adapté pours’affranchir de « extended_crl »

-extended_crl

%PKI_ASIP_CERT_FOLDER%root-cer.pem

Root CA GIP-CPS de signature de certificats

Pas nécessaire si l’option crl_check_all est utilisée

N/A

%PKI_ASIP_CERT_FOLDER%root-crl.pem

CA GIP-CPS intermédiaire de signature de CRL

N/A

%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-cer.pem

Certificat intermédiaire de signature de certificats Classe X (X = {0, 1, 2, 3, 4})

N/A

%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-crl.pem

Certificat intermédiaire de signature de CRL Classe X (X = {0, 1, 2, 3,4})

Le patch est tel que le statut des certificats de signature de CRL n’est pas vérifié. A faire en ligne de commande, en particulier en utilisation avec mod_ssl.

%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-crl.pem

%CRT_FOLDER%certificat.pem Certificat final Classe X à vérifier

%CRT_FOLDER%certificat.pem

Tableau 18 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 patché

Page 29: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

29 / 155

10 Utilisation de OpenSSL en tant que client HTTPS OpenSSL embarque un client SSL qu’il est utile de prendre en main avant de l’utiliser avec la CPx et le PKCS#11.

La documentation de référence de ce module est ici : https://www.openssl.org/docs/apps/s_client.html

10.1 Authentification simple du serveur Dans ce mode, les paramètres OpenSSL pertinents sont :

OpenSSL> s_client -connect www.mssante.fr:443 -servername www.mssante.fr -CAfile filename -state -showcerts -tls1_2 -debug

Tableau 19 : Authentification simple du serveur

10.2 Authentification mutuelle avec un certificat client logiciel Dans ce mode, les paramètres OpenSSL pertinents sont :

OpenSSL> s_client -connect www.mssante.fr:443 -servername www.mssante.fr -cert filename -certform DER|PEM -key filename -keyform DER|PEM -pass arg -CAfile filename -state -showcerts -tls1_2 -debug

Tableau 20 : Authentification mutuelle avec un certificat client logiciel

Cette ligne de commande est utile dans les environnements de production mettant en œuvre des machines clientes équipées de certificat ASIP Santé IGC2Bis Classe 4 ou IGC-Santé (ORG / AUTH_CLI en partcitulier).

Dans ce cas d'usage, la conversion du PKCS12 (bi-clé IGC-2bis Classe 4 ou, à terme, bi-clé AUTH_CLI IGC-Santé) de l'ASIP Santé en 2 fichiers (certificat, clé privée) séparés au format PEM est généralement nécessaire. Les commandes (à adapter) sont les suivantes :

Commandes de conversion du PKCS12 ASIP Santé en 2 fichiers (certificat, clé privée):

Extraction du certificat

openssl pkcs12 -in bicle.asipsante.fr.p12 -nocerts -nodes -out bicle.asipsante.fr.pk.pem -passin pass:XXXXXX

A mettre au point en fonction des noms de fichiers et du mot de passe protégeant le PKCS12

Extraction de la clé privée

openssl pkcs12 -in bicle.asipsante.fr.p12 -clcerts -nokeys -out bicle.asipsante.fr.cert.pem -passin pass:XXXXXX

A mettre au point en fonction des noms de fichiers et du mot de passe protégeant le PKCS12

Tableau 21: Conversion du PKCS12 ASIP Santé en deux fichiers (certificat, clé privée) au format PEM séparés

Page 30: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

30 / 155

10.3 Consommation du flux HTTP Une fois la session SSL ouverte, il est possible de consommer le flux HTTP. Par exemple (<enter> marque un appui sur la touche « entrée » du clavier nécessaire pour la séparation des champs et à l’envoi effectif de la commande) :

OpenSSL> GET / HTTP/1.1<enter>host: www.mssante.fr<enter><enter>

Tableau 22 : Consommation du flux HTTP

Page 31: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

31 / 155

11 Utilisation de la carte CPS avec le moteur PKCS#11 OpenSC pour OpenSSL

11.1 Prérequis « accès CPx » : identification du module PKCS#11 de l’ASIP Santé

Le module PKCS#11 de l’ASIP Santé fait partie de l’ensemble de composants logiciels appelé Cryptolib CPS : il est installé lors de l’installation de la Cryptolib CPS dans sa version destinée au système d’exploitation cible. La Cryptolib CPS supporte les systèmes d’exploitation Microsoft Windows, Apple Mac OS X et Linux.

11.1.1 Environnement Microsoft Windows

En environnement Microsoft Windows, le module PKCS#11 de l’ASIP Santé prend la forme d’une DLL (Dynamic Link Library).

Cette bibliothèque porte un nom fonction de la version de la Cryptolib CPS installée et de l’architecture du système:

cps3_pkcs11_w64.dll

cps3_pkcs11_w32.dll

cps_pkcs11_pcsc_w32.dll

cps_pkcs11_w32.dll

Cette bibliothèque se trouve dans un répertoire lui aussi fonction de la version de la Cryptolib CPS installée et de l’architecture du système:

C:\Windows\

C:\Windows\System32\

C:\Windows\SysWOW64\

11.1.2 Environnement Linux

En environnement Linux, le module PKCS#11 de l’ASIP Santé prend la forme d’un SO (Shared Object).

Cette bibliothèque porte un nom fonction de la version de la Cryptolib CPS (seule l’architecture 32b est supportée par la Cryptolib CPS sous Linux) :

libcps3_pkcs11_lux.so

libcps_pkcs11_pcsc_lux.so

libcps_pkcs11_lux.so

Cette bibliothèque se trouve dans un répertoire lui aussi fonction de la version de la Cryptolib CPS installée :

/usr/local/galss

/opt/santesocial/CPS/lib (+ lien symbolique dans /usr/lib)

Page 32: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

32 / 155

11.1.3 Environnement Apple Mac OS X

En environnement Apple Mac OS X, le module PKCS#11 de l’ASIP Santé prend la forme d’une DYLIB (DYnamic LIBrary).

Cette bibliothèque porte un nom fonction de la version de la Cryptolib CPS :

libcps3_pkcs11_osx.dylib

libcps_pkcs11_pcsc_osx.dylib

libcps_pkcs11_osx.dylib

Cette bibliothèque se trouve dans :

/usr/lib

Pour plus de détails, voir « Manuel d’installation et d’utilisation de la Cryptolib CPS »

Tableau 23 : Manuel d’installation et d’utilisation de la Cryptolib CPS

11.2 Prérequis « Extension OpenSC pour OpenSSL » : récupération et installation du moteur PKCS#11 OpenSC

Il est nécessaire de se procurer un module appelé « engine_pkcs11 » pour faire le lien entre le module PKSC11 de la CPx et OpenSSL.

Ce module peut être récupéré sur le site d’OpenSC : https://github.com/OpenSC/.

OpenSC est un projet Open Source autour des cartes à puce. Le moteur PKCS#11 « engine_pkcs11 » a été développé pour interconnecter OpenSSL avec un module PKCS#11.

11.2.1.1 Pour Windows

Le « Smart Card Bundle » doit être téléchargé depuis :

https://github.com/OpenSC/OpenSC/wiki

Les versions récentes d‘OpenSC compilées pour Windows (OpenSC 0.12.0+) ne distribuent plus les DLLs « engine_pkcs11.dll », « libltdl3.dll » et « libp11.dll »

Se tourner vers Linux Compiler les sources pour Windows :

https://www.opensc-project.org/opensc/wiki/WindowsInstaller

https://www.opensc-project.org/opensc/wiki/NightlyBuilds

11.2.1.2 Pour Linux et Apple Mac OS X

Le moteur est directement téléchargeable depuis cette adresse :

https://github.com/OpenSC/OpenSC/wiki/OpenSSL-engine-for-PKCS%2311-modules

Pour installer le moteur, il faudra auparavant avoir installé la bibliothèque libp11 :

https://github.com/OpenSC/libp11/wiki/

Page 33: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

33 / 155

11.3 Chargement du moteur PKCS#11 OpenSC OpenSC propose un moteur OpenSSL permettant d’interfacer génériquement OpenSSL avec une librairie PKCS#11.

Une fois ce moteur compilé et installé, il suffit de demander à OpenSSL de le charger en mémoire en lui attribuant un identifiant afin de faire bénéficier à OpenSSL des fonctions cryptographiques exposées par le PKCS#11 considéré.

Cet identifiant servira à appeler par la suite ce moteur à partir des commandes OpenSSL classiques.

11.3.1 Principe du chargement

Le chargement du moteur PKCS#11 OpenSC pour OpenSSL se fait de 2 manières :

1. En ligne de commande

Dans ce cas, une fois chargé, le moteur PKCS#11 OpenSC pour OpenSSL s’utilise depuis le shell OpenSSL

2. A partir d’un fichier de configuration au format OpenSSL

Dans ce cas, il est possible de spécifier l’emplacement du fichier de configuration de 2 facons différentes à OpenSSL 1. Soit via l’option « -config » si la fonction OpenSSL utilisée supporte cette option 2. Soit en passant le chemin du fichier de configuration à OpenSSL via la variable

d’environnement OPENSSL_CONF

Page 34: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

34 / 155

11.3.2 A partir d’un fichier de la ligne de commande

Dans ce cas d’usage, il est nécessaire de lancer le « shell » OpenSSL, matérialisé dans ce qui suit par « OpenSSL> », en entrant « openssl.exe » dans la ligne de commandes, puis d’entrer la commande suivante, fonction du système d’exploitation utilisé et du module PKCS#11 disponible identifié en suivant les indications fournies plus haut :

11.3.2.1 Microsoft Windows

OpenSSL> engine -t dynamic -pre SO_PATH:c:/windows/engine_pkcs11.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:c:/windows/system32/cps3_pkcs11_w32.dll

Tableau 24 : chargement de engine_pkcs11 sous Windows

11.3.2.2 Linux

OpenSSL> engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH: /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so

Tableau 25 : chargement de engine_pkcs11 sous Linux

11.3.2.3 Apple Mac OS X

OpenSSL> engine -t dynamic -pre SO_PATH:/Library/OpenSC/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/libcps3_pkcs11_osx.dylib

Tableau 26 : chargement de engine_pkcs11 sous Mac OS X

Page 35: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

35 / 155

11.3.2.4 Options utilisées

Option Commande Description

-pre

liste des commandes à exécuter avant le chargement du module

-pre SO_PATH défini le chemin d’accès au moteur PKCS#11

-pre MODULE_PATH défini le chemin d’accès au module PKCS#11 de l’ASIP Santé

-pre ID défini l’identifiant du module PKCS#11 chargé en mémoire (doit être « pkcs11 »)

-pre LOAD commande de chargement du module en mémoire

-pre LIST_ADD :1 Ajout à la liste des modules pré-chargés, en position 1

-t dynamic chargement du module en mémoire de manière partagée

Tableau 27 : Options utilisées

11.3.3 A partir d’un fichier de configuration

Il est possible de spécifier le paramétrage du moteur PKCS#11 OpenSC pour OpenSSL dans un fichier de configuration. De cette manière, il n’est pas nécessaire de charger préalablement le moteur en mémoire.

Le fichier, que l’on peut appeler génériquement « openssl.cfg », doit contenir à minima les entrées suivantes :

openssl.cfg

openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] pkcs11 = pkcs11_section [pkcs11_section] engine_id = pkcs11 dynamic_path = /usr/lib/engines/engine_pkcs11.so MODULE_PATH = /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so init = 0 [req] distinguished_name = req_distinguished_name [req_distinguished_name]

Tableau 28 : fichier openssl.cfg

Page 36: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

36 / 155

Le fichier de configuration se spécifie : 1. Soit via l’option « -config » si la fonction OpenSSL utilisée supporte cette option 2. Soit en passant le chemin du fichier de configuration à OpenSSL via la variable

d’environnement OPENSSL_CONF :

Sous Windows : set OPENSSL_CONF=C:/openssl.cfg

Sous Linux : export OPENSSL_CONF= ~/openssl.cfg

11.3.4 Vérification

Si tout se passe bien, le résultat devra être :

(dynamic) Dynamic engine loading support [Success]: SO_PATH:c:/windows/engine_pkcs11.dll [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD [Success]: MODULE_PATH:C:/windows/system32/cps3_pkcs11_w32.dll Loaded: (pkcs11) pkcs11 engine [ available ]

Tableau 29 : Vérification du chargement de engine_pkcs11

Le module PKCS#11 est alors chargé en mémoire et prêt à être utilisé par OpenSSL.

Page 37: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

37 / 155

11.4 Commandes OpenSSL

11.4.1 Liste des commandes

Les fonctions OpenSSL pouvant utiliser un moteur PKCS#11 en argument sont par exemple:

Fonction OpenSSL Description

req Création de demande de certificats (ou de certificats auto signés)

smime Gestion des smimes: signature/chiffrement/déchiffrement de mails

x509 Gestion de certificats : lecture/conversion/signature

dgst Fonctions de hachage : création de condensat/signature/vérification signature

rsautl (dépréciée) Utilitaire RSA : signature de messages, chiffrement /déchiffrement

pkeyutl

Utilitaire qui remplace rsatul. Le moteur PKCS#11 pour OpenSSL d’OpenSC n’est pas compatible avec OpenSSL 1.0.0+: 1592:error:260C0065:engine routines:ENGINE_get_pkey_meth:unimplemented public key method:.\crypto\engine\tb_pkmeth.c:128: 1592:error:0609D09C:digital envelope routines:INT_CTX_NEW:unsupported algorithm:.\crypto\evp\pmeth_lib.c:164:

enc Utilitaire de chiffrement

s_client Fonctions SSL/TLS clientes : connexion à un serveur SSL

s_server Fonctions SSL/TLS serveurs : création de serveur SSL

pkcs7 Gestion de PKCS#7 : Conversions

rand Génération de nombre pseudo aléatoire

speed Test de performances des algorithmes de cryptographies

Tableau 30 : liste de fonctions pouvant utiliser un moteur pkcs#11 en argument

11.4.2 Description des paramètres communs

L’utilisation du moteur PKCS#11 par une commande OpenSSL se fait toujours de la même manière :

Paramètre Description

-engine pkcs11 indique le moteur à utiliser pour les fonctions cryptographiques de la commande (ID=identifiant du module PKCS#11 chargé, dans notre cas pkcs11)

-keyform engine

indique la forme de la clé privée à utiliser. engine indique que la clé est exposée par le moteur et non sous les formes classiques PEM ou DER. Dans le cas du PKCS#11 CPS, les clés privées se trouvent sur la carte CPx et sont manipulées via des identifiants exposés par le module PKCS#11.

-key ID

indique où aller chercher la clé (publique ou privée)

Le format de ID est <slot>:<keyid> ou <keyid> ou id_<id> ou slot_<slot>-id_<id> ou label_<label>, oui slot_<slot>-label_<label>. <slot>:<keyid> et label_<label> gèrent mieux que les autres formats les situations « multi-lecteurs ».

<slot> est le numéro de slot correspondant au lecteur avec la carte à utiliser. Facultatif. Il a pour valeur 0 par défaut si non renseigné.

Page 38: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

38 / 155

Paramètre Description

<id>, <keyid> ou <label> sont fonction du type de clé, du type de carte et de la version de Cryptolib CPS utilisée dans le cas d’une carte CPx (voir tableau ci-après).

-inkey ID pour certaines commandes -key sera remplacé par -inkey. L’utilisation est identique.

-sign ID pour certaines commandes -key sera remplacé par -sign. L’utilisation est identique.

-signkey ID pour certaines commandes -key sera remplacé par -signkey. L’utilisation est identique.

Tableau 31 : Paramètres d’utilisation du moteur PKCS#11

Les identifiants de clé sont fonction du type de carte et de la version de la Cryptolib CPS utilisée:

Cryptolib CPS

Carte Key / Certificat Signature

Key / Certificat Authentification

Key / Certificat Authentification Technique

v4

CPS2ter2 id : 01000000 id : 04000000 N/A

CPS3 id : 01000000 id : 04000000 N/A

v5

CPS2ter id : 1217 id : 1216 N/A

CPS3

id : E828BD080F8025000001FF001001 label : CPS_PRIV_SIG

id : E828BD080F8025000001FF001002 label : CPS_PRIV_AUT

id : E828BD080F8025000001FF001003 label : CPS_PRIV_TECH_AUT

Tableau 32 : Liste des identifiants de clé

2 Les informations concernant la carte CPS2ter et la Cryptolib CPS v4 sont fournies à titre indicatif :

depuis mars 2014, toutes les cartes en exploitation sont des CPS3.

depuis avril 2015, la Cryptolib CPS v4 n’est plus supportée : il est conseillé de s’orienter vers la Cryptolib CPS v5

Page 39: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

39 / 155

11.5 Exemples de commandes OpenSSL utilisant la CPx via le moteur PKCS#11 OpenSC

11.5.1 Génération d’une requête de certificat signée avec le certificat de signature de la carte CPx

Paramètre Description

OpenSSL> Si le fichier pointe par -config contient les paramètres du moteur PKCS#11 OpenSC, le shell peut être remplacé par le ligne de commande complète

req

Utilitaire de génération de certificat et de requête de certificat au format PKCS#10. La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/req.html

-config c:/openssl.cfg

Alternativement, passer par la variable d’environnement OPENSSL_CONF :

Sous Windows : set OPENSSL_CONF=C:/openssl.cfg

Sous Linux : export OPENSSL_CONF= ~/openssl.cfg

-engine pkcs11

-new crée une nouvelle requête de certificat et un nouvelle clé privée

-key E828BD080F8025000001FF001001 identifiant de clé privée de signature dans la carte (voir section « paramètres »)

-keyform engine

-out req.pem

-text

-x509

-subj "/CN=TEST"

Tableau 33 : OpenSSL : req

Page 40: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

40 / 155

11.5.2 Signature d’un mail avec une carte CPx

Paramètre Description

OpenSSL>

smime

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/smime.html smime ne supporte pas -config : passer par OPENSSL_CONF

-sign

-engine pkcs11

-signer C:/res.pem

-in c:/requete_00007_tosign.txt

-keyform engine

-inkey E828BD080F8025000001FF001001 identifiant de clé privée de signature dans la carte (voir section « paramètres »)

-text

Tableau 34 : OpenSSL : smime

Par défaut : signature au format PKCS7 v1.5 (RFC2315) : Hashage + padding + signature. Pour une signature au format CMS (RFC2630), utiliser l’option « -nodetach » qui formatera avec une structure SignedData.

11.5.3 Génération d’un nombre pseudo-aléatoire à partir de la carte CPx

Paramètre Description

OpenSSL>

rand

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/rand.html rand ne supporte pas -config : passer par OPENSSL_CONF

-engine pkcs11

10 ici 10 : génération de 10 nombres aléatoires

Tableau 35 : OpenSSL : rand

Page 41: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

41 / 155

11.5.4 Connexion à un serveur sécurisé avec SSL

Paramètre Description

OpenSSL>

s_client

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/s_client.html s_client ne supporte pas -config : passer par OPENSSL_CONF

-connect testssl.asipsante.fr:443 URL du site distant sécurisé en SSL.

-servername testssl.asipsante.fr [Facultatif] Positionne le nom du serveur dans le lien TLS pour supporter SNI (Server Name Indication).

-engine pkcs11

-state

-showcerts

-keyform engine

-key E828BD080F8025000001FF001002 identifiant de clé privée d’authentification dans la carte (voir section « paramètres »)

-CAfile c:\ca-bundle.cer Dans cet exemple ce sont les certificats d’autorité ASIP Santé Classe 4 (pour vérification du certificat serveur)

-cert c:/auth.pem

le certificat d’authentification présent sur la carte et correspondant à la clé privée d’authentification dans la carte (ce certificat devra préalablement être extrait et converti en PEM)

-certform PEM

-ssl3

-debug

Tableau 36 : OpenSSL : s_client

Pour consommer le flux HTTPS utiliser :

GET / HTTP/1.1

host: testssl.asipsante.fr

Connection: Keep-Alive

<enter>

<enter>

(voir plus haut).

Page 42: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

42 / 155

11.5.5 Hachage et signature d’un fichier

Paramètre Description

OpenSSL>

dgst

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/dgst.html dgst ne supporte pas -config : passer par OPENSSL_CONF

-sign E828BD080F8025000001FF001001

-engine pkcs11

-out c:/toto.txt fichier résultat en sortie

-keyform engine

-hex c:/requete_00007.txt nom du fichier à hacher

Tableau 37 : OpenSSL : dgst

11.5.6 Test de performances de l’algorithme de hachage

Paramètre Description

OpenSSL>

speed

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/speed.html speed ne supporte pas -config : passer par OPENSSL_CONF

-engine pkcs11

sha1

Tableau 38 : OpenSSL : speed

Page 43: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

43 / 155

11.5.7 Signature d’une requête de demande de certificat

Paramètre Description

OpenSSL>

x509

La documentation de référence pour cette commande est : https://www.openssl.org/docs/apps/x509.html x509 ne supporte pas -config : passer par OPENSSL_CONF

-engine pkcs11

-req

-in c:/requete_tosign.txt

-keyform engine

-out c:/toto.txt

-signkey E828BD080F8025000001FF001001 identifiant de clé privée de signature dans la carte (voir section « paramètres »)

Tableau 39 : OpenSSL : x509

Page 44: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

44 / 155

11.7 Utilisation en sans-contact

Le moteur PKCS#11 OpenSC pour OpenSSL est par défaut non fonctionnel sur le volet sans-contact : Found empty token; PKCS11_get_private_key returned NULL cannot load key file from engine 1444:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:.\crypto\engine\eng_pkey.c:126: unable to load key file error in dgst

Ceci est dû au fait que la partie sans-contact de la CPS3 n’exige aucun PIN. Il suffit de corriger \engine_pkcs11-0.x.y\src\engine_pkcs11.c et de recompiler : if (isPrivate && !tok->userPinSet && !tok->readOnly) { fprintf(stderr, "Found slot without user PIN\n"); //ASIP: Mise en commentaire du code de sortie: //PKCS11_release_all_slots(ctx, slot_list, slot_count); //return NULL; //END ASIP }

Il est par ailleurs préférable d’utiliser s_client avec l’option « -key label_CPS_PRIV_TECH_AUT » : s_client -connect testssl.asipsante.fr:443 -servername testssl.asipsante.fr -engine pkcs11 -state -showcerts -keyform engine -key label_CPS_PRIV_TECH_AUT -CAfile … -certform PEM -ssl3 -debug

Tableau 40 : Utilisation du moteur PKCS#11 OpenSC pour OpenSSL en sans-contact

Page 45: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

45 / 155

11.8 Restriction d’usage – limites Les fonctions d’OpenSSL associé à un moteur PKCS#11 ne peuvent pas réaliser certaines opérations utiles dans le cadre de la gestion de la carte CPx et de ses certificats.

# Description

1

Récupération d’un certificat directement sur une carte CPx: pour certaines fonctions d’OpenSSL (s_client, smime), le certificat correspondant à une clé privée de la carte CPx doit être donné en paramètre. Mais seul un fichier correspondant au certificat peut être donné. OpenSSL ne peut pas passer par le module PKCS#11 pour aller chercher ce certificat. Aucune fonction d’extraction de certificat n’est disponible avec le moteur PKCS#11. Ce certificat devra préalablement être extrait de la carte (par une fonction PKCS#11 par exemple, ou bien d’autres outils, tel que pkcs11-tool de OpenSC)

2

Constatation du blocage du port de la carte après une utilisation du module PKCS#11 en ligne de commandes. Impossibilité de décharger le module en mémoire. Fermeture de la session OpenSSL obligatoire, puis relance (fermeture de la fenêtre DOS). Le problème peut être résolu en utilisant OpenSSL en tant que librairie dans du code C par exemple : dans ce cas, des fonctions de libération du moteur PKCS#11 existent (Engine_free() par exemple).

Tableau 41 : Restriction d’usage – Limites

Page 46: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

46 / 155

12 Problème « unused bit non nul sur le champ de signature des certificats CPx » aka « unused bit »

Certains certificats portés par les cartes CPx sont reconnus comme invalides avec les versions récentes d’OpenSSL.

12.1 Symptômes L’erreur affichée dans les logs d’erreur d’OpenSSL est « invalid bit string bits left » lors du chargement des certificats concernés.

Dans ce cas, toutes les opérations suivant cette erreur sont impossibles (vérification de statut de certificat, utilisation du certificat pour établir un lien SSL…).

12.2 Causes du problème Les certificats rejetés présentent tous la même caractéristique :

# Description

1 La signature du certificat est une donnée de type BIT STRING en ASN.1

la donnée que constitue la signature est précédée d’un champ indiquant le nombre de bits non significatifs (« unused bits »)

2 Pour une signature, tous les bits sont significatifs

le champ « unused bits » devrait donc être valorisé à ‘00’

3 Pour les certificats vus comme invalides, ce champ « unused bits » n’est pas valorisé à ‘00’ et est donc incorrect

4 Il s’agit d’une non-conformité des certificats portés par les cartes de la famille CPS.

5 Cette non-conformité n’était pas visible jusqu’ici car aucun des logiciels ou outils communément utilisés pour manipuler des certificats n’effectuait pas de contrôle sur ce champ.

6

Cette non-conformité avait été identifiée fin septembre 2014 au niveau de la production des cartes CPS et un correctif a été mis en production début octobre 2014. Les certificats produits et embarqués sur les cartes depuis début octobre 2014 ne présentent donc plus cette non-conformité. Toutefois toutes les cartes valides produites avant cette date peuvent présenter cette anomalie et la volumétrie est importante.

Tableau 42 : Caractéristique des certificats CPx à l’origine du problème constaté

12.3 Lien avec OpenSSL OpenSSL est sensible à cette non-conformité et rejette les certificats qui la présentent suite à la publication de la CVE-2014-8275 (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-8275).

Page 47: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

47 / 155

12.4 Versions d’OpenSSL concernées Les versions d’OpenSSL répondant à la CVE-2014-8275 et concernées par ce problème sont les suivantes :

Branche Dernière version Report de la modification “unused bit”

0.9.8 0.9.8zf 0.9.8zd [8 Jan 2015]

1.0.0 1.0.0r 1.0.0p [8 Jan 2015]

1.0.1 et 1.0.2 1.0.1m et 1.0.2a 1.0.1k [8 Jan 2015]

1.1.0 1.1.0dev (20/12/2014 commitée le 05/01/2015).

Tableau 43 : Versions d’OpenSSL concernées

Les tests réalisés par l’ASIP confirment que les certificats avec un « unused bits » non nul pour la signature du certificat sont :

reconnus comme valides avec la version 1.0.1j d’OpenSSL par exemple

reconnus comme invalides avec la version 1.0.1k d’OpenSSL par exemple

Changes between 1.0.1j and 1.0.1k

[…] Fix various certificate fingerprint issues. By using non-DER or invalid encodings outside the signed portion of a certificate the fingerprint can be changed without breaking the signature. Although no details of the signed portion of the certificate can be changed this can cause problems with some applications: e.g. those using the certificate fingerprint for blacklists. 1. Reject signatures with non zero unused bits. If the BIT STRING containing the signature has non zero unused bits reject the signature. All current signature algorithms require zero unused bits.

Tableau 44 : Extrait du changelog d’OpenSSL

Page 48: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

48 / 155

12.5 Correction Une solution consiste à patcher OpenSSL pour le rendre moins sensible aux spécificités CPS.

Le patch que l’ASIP Santé a mis au point sur OpenSSL 1.0.1k (le principe restant le même sur les versions supérieures) est joint.

12.5.1 Mise à disposition

Mise à disposition Un patch pour OpenSSL est mis à disposition sur le site http://integrateurs-cps.asipsante.fr/

Tableau 45 : Patch OpenSSL : Mise à disposition

12.5.2 Application

cd ${PATH_TO_OPENSSL_PARENT}/openssl-1.0.1k/ [sudo] patch -p1 < ${PATH_TO_PATCH }/openssl-1.0.1k-patch-asip-sante-unusedbit.patch

Tableau 46 : Patch OpenSSL : Application

12.5.3 Compilation

faire un ./config[ure] avec l’option -DOPENSSL_ASIP_NO_INVALID_BIT_STRING

Tableau 47 : Patch OpenSSL : Compilation

12.5.4 Intérêts

# Description

1 conserver les alertes dans les logs d’erreurs OpenSSL

- sans qu’elles soient bloquantes - ce qui rend possible les investigations ultérieures des logs

2 recompiler ultérieurement sans cette option une fois la solution 2 active en récupérant le même binaire qu’avec une appli non patchée

3 attendre la généralisation des contournements client, via la Cryptolib CPS notamment

Tableau 48 : Patch OpenSSL : Intérêts

12.5.5 Analyse

Analyse

Cette solution n’introduit pas de faille de sécurité dans les systèmes qui ne reposent pas sur l’unicité de l’empreinte des certificats utilisés:

le CVE concerne "Only custom applications that rely on the uniqueness of the fingerprint (e.g. certificate blacklists)"

Tableau 49 : Patch OpenSSL : Mise à disposition

Page 49: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

49 / 155

12.5.6 Correction sous BIG-IP de F5

Les versions 12 de BIG-IP embarquent une version d’openSSL permettant de gérer les cartes porteuses de l’anomalie « unused bit ».

Le correctif de la vulnérabilité OpenSSL CVE-2014-8275 est abandonné dans les versions 12 de F5, cf. plus haut: la correction de cette vulnérabilité entraine un non-fonctionnement avec les cartes porteuses de l’anomalie « unused bit ».

Les références chez F5 sur ce sujet sont:

https://support.f5.com/kb/en-us/solutions/public/16000/100/sol16136.html

https://support.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-ltm-12-1-0.html

Correction du problème "unused bit" sous F5

La Correction du problème "unused bit" sous F5 consiste à passer sur une version 12.X de BIG-IP.

Tableau 50 : Correction du problème "unused bit" sous F5

Page 50: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

50 / 155

13 Utilisation de OpenSSL comme bibliothèque

13.1 Avertissement

OpenSSL, quelle que soit sa version - y compris OpenSSL 1.0.1h+, utilisée comme bibliothèque sans être corrigée ne permet pas d’utiliser les CRLs ASIP Santé avec le flag « CHECK_ALL ». 2 solutions :

1- Corriger OpenSSL 2- Coder spécifiquement la vérification de CRL ASIP Santé dans l’application utilisatrice

d’OpenSSL

Tableau 51 : Avertissement

13.2 Présentation L’API OpenSSL est disponible pour une application en C.

La bibliothèque de l’engine d’OpenSSL s’inclut dans le code de cette façon :

#include <openssl/engine.h>

Page 51: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

51 / 155

13.3 Exemples de code

13.3.1 Exemple de fonction permettant le chargement du module PKCS#11

Exemple de fonction permettant le chargement du module PKCS#11

static int tls_engine_load_dynamic_pkcs11(const char *pkcs11_so_path, const char *pkcs11_module_path) { char *engine_id = "pkcs11"; const char *pre_cmd[] = { "SO_PATH", pkcs11_so_path, "ID", engine_id, "LIST_ADD", "1", /* "NO_VCHECK", "1", */ "LOAD", NULL, NULL, NULL }; const char *post_cmd[] = { "MODULE_PATH", pkcs11_module_path, NULL, NULL }; if (!pkcs11_so_path || !pkcs11_module_path) return 0; wpa_printf(MSG_DEBUG, "ENGINE: Loading pkcs11 Engine from %s", pkcs11_so_path); return tls_engine_load_dynamic_generic(pre_cmd, post_cmd, engine_id); }

Tableau 52 : Exemple de fonction permettant le chargement du module PKCS#11

Page 52: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

52 / 155

13.3.2 Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL

Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL

static int tls_engine_load_dynamic_generic(const char *pre[], const char *post[], const char *id) { ENGINE *engine; const char *dynamic_id = "dynamic"; engine = ENGINE_by_id(id); if (engine) { ENGINE_free(engine); wpa_printf(MSG_DEBUG, "ENGINE: engine '%s' is already " "available", id); return 0; } ERR_clear_error(); engine = ENGINE_by_id(dynamic_id); if (engine == NULL) { wpa_printf(MSG_INFO, "ENGINE: Can't find engine %s [%s]", dynamic_id, ERR_error_string(ERR_get_error(), NULL)); return -1; }

/* Perform the pre commands. This will load the engine. */ while (pre && pre[0]) { wpa_printf(MSG_DEBUG, "ENGINE: '%s' '%s'", pre[0], pre[1]); if (ENGINE_ctrl_cmd_string(engine, pre[0], pre[1], 0) == 0) { wpa_printf(MSG_INFO, "ENGINE: ctrl cmd_string failed: " "%s %s [%s]", pre[0], pre[1], ERR_error_string(ERR_get_error(), NULL)); ENGINE_free(engine); return -1; } pre += 2; }

Page 53: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

53 / 155

Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL

/* * Free the reference to the "dynamic" engine. The loaded engine can * now be looked up using ENGINE_by_id(). */ ENGINE_free(engine); engine = ENGINE_by_id(id); if (engine == NULL) { wpa_printf(MSG_INFO, "ENGINE: Can't find engine %s [%s]", id, ERR_error_string(ERR_get_error(), NULL)); return -1; } while (post && post[0]) { wpa_printf(MSG_DEBUG, "ENGINE: '%s' '%s'", post[0], post[1]); if (ENGINE_ctrl_cmd_string(engine, post[0], post[1], 0) == 0) { wpa_printf(MSG_DEBUG, "ENGINE: ctrl cmd_string failed:" " %s %s [%s]", post[0], post[1], ERR_error_string(ERR_get_error(), NULL)); ENGINE_remove(engine); ENGINE_free(engine); return -1; } post += 2; } ENGINE_free(engine); return 0; }

Tableau 53 : Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL

Page 54: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

54 / 155

13.3.3 Exemple de fonction permettant la récupération d’une clé publique de la carte CPx

Exemple de fonction permettant la récupération d’une clé publique de la carte CPx

static int tls_engine_init(struct tls_connection *conn, const char *engine_id, const char *pin, const char *key_id) { #ifndef OPENSSL_NO_ENGINE int ret = -1; if (engine_id == NULL) { wpa_printf(MSG_ERROR, "ENGINE: Engine ID not set"); return -1; } if (pin == NULL) { wpa_printf(MSG_ERROR, "ENGINE: Smartcard PIN not set"); return -1; } if (key_id == NULL) { wpa_printf(MSG_ERROR, "ENGINE: Key Id not set"); return -1; }

ERR_clear_error(); conn->engine = ENGINE_by_id(engine_id); if (!conn->engine) { wpa_printf(MSG_ERROR, "ENGINE: engine %s not available [%s]", engine_id, ERR_error_string(ERR_get_error(), NULL)); goto err; } if (ENGINE_init(conn->engine) != 1) { wpa_printf(MSG_ERROR, "ENGINE: engine init failed " "(engine: %s) [%s]", engine_id, ERR_error_string(ERR_get_error(), NULL)); goto err; } wpa_printf(MSG_DEBUG, "ENGINE: engine initialized");

Page 55: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

55 / 155

Exemple de fonction permettant la récupération d’une clé publique de la carte CPx

if (ENGINE_ctrl_cmd_string(conn->engine, "PIN", pin, 0) == 0) { wpa_printf(MSG_ERROR, "ENGINE: cannot set pin [%s]", ERR_error_string(ERR_get_error(), NULL)); goto err; } conn->public_key = ENGINE_load_public_key (conn->engine, key_id, NULL, NULL); if (!conn->public_key) { wpa_printf(MSG_ERROR, "ENGINE: cannot load public key with id" " '%s' [%s]", key_id, ERR_error_string(ERR_get_error(), NULL)); ret = TLS_SET_PARAMS_ENGINE_INIT_FAILED; goto err; } return 0; err: if (conn->engine) { ENGINE_free(conn->engine); conn->engine = NULL; } if (conn->public_key) { EVP_PKEY_free(conn->public_key); conn->public_key = NULL; } return ret; #else /* OPENSSL_NO_ENGINE */ return 0; #endif /* OPENSSL_NO_ENGINE */ }

Tableau 54 : Exemple de fonction permettant la récupération d’une clé publique de la carte CPx

Page 56: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

56 / 155

14 Utilisation d’OpenSSL en HTTPS au travers de mod_ssl

14.1 Cadre d’utilisation OpenSSL propose une implémentation des protocoles SSLv3, TLSv1.0, TLSv1.1 et TLS v1.2.

Ces protocoles sont mis en œuvre dans le cadre d’échanges entre des clients et un serveur Web, échanges qui sont sécurisés via HTTPS.

HTTPS peut être utilisé via :

Une authentification simple du serveur Web o C’est le cas le plus fréquent

Une authentification mutuelle client-serveur o Ce scénario est implémentable avec les cartes CPS qui embarque un certificat

d’authentification exposé auprès de l’OS ou du navigateur via la Cryptolib CPS v5.

Dans tous les cas de figure, OpenSSL s’utilise avec

Apache HTTPD via mod_ssl

NGinx via http_ssl_module

Serveur Web (1)

Apache HTTPD

mod_ssl

OpenSSL

Client

HTTPS(Authent. Mutuelle)

Naviga-teur

Cryptolib CPS

Serveur Web (2)

NGinX

http_ssl_module

OpenSSL

Figure 10 : Principe d’utilisation d’OpenSSL avec un serveur Web

Page 57: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

57 / 155

14.2 Principe de l’authentification mutuelle L’authentification mutuelle met en œuvre deux parties (en général un client et un serveur) qui échangent leurs certificats respectifs (cryptographie à clé publique, asymétrique), se font confiance, en déduisent un secret de session partagé (clé secrète symétrique) et l’utilise pour protéger leurs échanges. Ce processus se schématise comme suit (la partie « Handshake » est simplifiée):

Fin de session SSL

Session SSL

Handshake

PorteurServeurServeurCertificat client Certificat serveur

Clé privée du client asymétrique

Clé privée du client asymétrique Clé privée du serveur

asymétrique

Clé privée du serveurasymétrique

NavigateurNavigateur

Demande de page 1

Ressource protégée

Présentation challenge + certificat du serveur + liste certificats client acceptés

Calcul crypto

Demande et saisie de code Porteur

Réponse au challenge + certificat client

Vérification certificat client et de la réponse au challenge

Construction secret partagé

Réponse page 1

Chiffrement réponse 1avec le secret partagé

Demande de page 2

Chiffrement réponse 2avec le secret partagé

Réponse page 2

Clé de session, secrète,

symétrique

Clé de session, secrète,

symétriqueClé de session,

secrète, symétrique

Clé de session, secrète,

symétrique

Calcul crypto

Code porteur OK

Construction secret partagé

Déchiffrement réponse 1avec le secret partagé

Déchiffrement réponse 2avec le secret partagé

Vérification du certificat serveur et du challenge

Figure 11 : Principe de l’authentification mutuelle

Page 58: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

58 / 155

14.3 De la prise en main à la mise en production : un projet d’intégration complet

La mise en place de l’authentification mutuelle doit être abordée comme un projet en tant que tel.

14.3.1 Compétences requises

Les compétences techniques requises pour mener à bien le projet sont les suivantes :

Acteur Composant Compétences

Serveur

Certificat SSL Bi-clé RSA, certificat, chaines de certification, CRL, PKI

Apache HTTPD

Connaissances Unix / Linux

Connaissances Apache HTTPD

Connaissances OpenSSL

Microsoft IIS Connaissances Microsoft IIS

Poste de travail

Page HTML

Développements Web / Ajax / JavaScript avancés Ergonomie

JavaScript

Cryptolib CPS Installée. Manuel d’installation et d’utilisation de la Cryptolib CPS assimilé.

Porteur Carte CPx

non expirées non révoquées non bloquée code porteur connu si possible : kit de cartes CPx de tests ASIP Santé

Tableau 55 : Prérequis

Page 59: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

59 / 155

14.3.2 Prise en main / PoC

Cette mise en place passe généralement par une prise en main ou un PoC qui permet

1. aux équipes techniques de monter en compétence sur des sujets qu’elles connaissent généralement peu ou qu’elles manipulent peu souvent

2. aux chefs de projet d’identifier les points dures ou les compétences qu’il faut nécessairement acquérir pour que le projet dépasse la simple maquette et passe en production.

Le schéma général illustrant le projet complet est fourni ci-après.

Le présent document couvre uniquement le point encadré en rouge.

Page 60: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

60 / 155

Authentification mutuelle0

2 -

Po

C0

1 -

Init

ialis

atio

n0

3 -

Dév

elo

pp

emen

ts0

3 -

Inté

grat

ion

/ T

ests

/

Acc

epta

tio

n0

4 -

Pro

du

ctio

nPhase

Début

Kick off

Fin

No go

Rédactions

Projet retenu

Go

Rédactions

Démonstrateur (PoC)

Oui

Non

Démo

Lesson learn

- Expression de besoin- Bibliographie- Planning

- Bilan

- Expression de besoin- Conception / Architecture- Planning- Cahiers de tests

Intégration

Q&A

Qualité?

Conforme

Authentification mutuelle

Développements des fonctionnalités

Adaptation des fonctionnalités

existantes

Non: nouveau projetOui: authent. mutuelle

est une nouv. fctProjet existant ?

Rédactions

- Manuel utilisateur- DAT- DEX

Non conforme

Figure 12 : Authentification mutuelle : un projet complet

Page 61: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

61 / 155

14.4 Prise en main / PoC La suite du document se concentre sur la partie « Prise en main / PoC / démonstrateur » signalée en rouge dans le schéma ci-dessus, cette partie pouvant être considérée comme un sous-projet important du projet complet.

14.4.1 « Brief project »

Clé Valeur

Nom Projet « prise en main / PoC » de l’authentification mutuelle

Objectifs

1 Prendre en main l’authentification mutuelle

2 Mesurer la pertinence du cas d’usage dans le contexte particulier du projet

3 Affiner l’expression de besoin

4 Evaluer l’ergonomie

5 Revoir la sécurité de l’application et les conditions d’accès

6 Assurer la montée en compétence des équipes techniques sur la partie PKI

7 Permettre au management de prendre une décision sur la généralisation de l’authentification mutuelle sur des bases objectives (démo, « lesson learn »)

Tableau 56 : Brief project

Page 62: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

14.4.2 Ressources

Sigle Rôle Profil Implication

MANAGEMENT_1 Donne son aval au projet Non chiffré

PROJET_1

Collecte les différents documents d’architecture existants

Chef de projet Non chiffré

Prend connaissance des documents

Ecrit l’expression de besoin

Ecrit le scénario de démonstration

Veille aux jalons

Assure la cohérence des tests

Organise la démonstration

Met à jour les documents d’architecture existants

Ecrit et rapporte le « lesson learn »

INTEG_CLIENT_1 Installe et configure le poste client, reflet des postes de travail visés par le projet Technicien poste de travail Windows connaissant le

poste de travail Santé&Social 14 heures

Teste unitairement ses installations.

INTEG_SERVER_1 Installe et configure la partie serveur Linux

Ingénieur Système connaissant Linux, pré sensibilisé à la PKI et connaissant le batch.

45 heures Teste unitairement ses installations.

INTEG_SERVER_2 Installe et configure la partie mod_ssl Ingénieur Système connaissant Linux, Apache,

mod_ssl et la PKI 47 heures

Teste unitairement ses développements.

INTEG_NETWORK_1 Ouvre les flux entre poste client et serveur Ingénieur réseau 03 heures

QA_1

Ecrit le plan de test fonctionnel

Non chiffré Passe le plan de test

Donne son aval pour la démonstration (qualité suffisante, adéquation avec l’expression de besoin).

Tableau 57 : Ressources nécessaires

Page 63: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

14.4.3 Livrables

# Livrable Responsable

1 Expression de besoins PROJET_1

2 Spécifications / Scénario de démo PROJET_1

3 Cahier de tests unitaires serveur INTEG_SERVER_2

4 Cahier de tests « Assurance Qualité » (« QA ») QA_1

5 Maquette PROJET_1

6 Dossier d’Architecture Technique (DAT) Maquette (config. Poste de travail utilisé, versions de composants serveurs et client, flux, IP, …)

PROJET_1

7 Spécifications des développements réalisés ou à réaliser INTEG_SERVER_1

8 Lesson learn PROJET_1

Tableau 58 : Livrables « maquette authentification mutuelle »

Page 64: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

64 / 155

14.4.4 Tâches techniques à réaliser

L’implémentation de l’authentification mutuelle par carte CPx dans une application doit se faire méthodiquement afin :

D’assurer la montée en compétence et la coordination des équipes impliquées

De pouvoir détecter les sources possibles d’erreur, sachant qu’elles sont potentiellement nombreuses

La logique générale de l’implémentation d’un tel service est la suivante :

Installation

Configuration HTTP

Installation OpenSSL

Configuration HTTPS

Certificat serveur de test

Serveur:Bi-clé / Certificat

du marché

Serveur:Bi-clé Certificat PKI

interne

Serveur:Bi-clé / Certificat

ASIP Santé« C4 / CSA »

Configuration HTTPS

Certificats serveur de production

Récupération des CRLs ASIP Santé

Scripts de conversion

Scripts de récupération

automatique des CRLs ASIP Santé

Identification des chaines de

certifications ASIP Santé pertinentes

Conversion de format

Configuration authentification du client par certificat

ASIP Santé

Autre authentification du

client

Configuration vérification des CRLs ASIP Santé

Configuration récupération régulières des CRLs ASIP Santé

Ouvertures des flux

Au

then

tifi

cati

on

Mu

tuel

le H

TTP

S

Ph

ase

HTT

P

Ph

ase

Au

then

tifi

cati

on

du

ser

veu

r (t

est)

Ph

ase

Au

then

tifi

cati

on

du

ser

veu

r (p

rod

)

Au

then

tifi

cati

on

du

ser

veu

rA

uth

enti

fica

tio

n d

u c

lien

t

Tests des fluxRés

eau

Ges

tio

n d

es C

RLs

ASI

P S

anté

Au

then

tifi

cati

on

du

clie

nt

Par

car

te C

Px

Figure 13 : Logique générale de l’implémentation de l’authentification mutuelle sur HTTPS

Page 65: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

65 / 155

14.4.5 Macro-Planning

Jalon Description Valeur

T0 Date de début (ici 02/06/2014)

T1 Fin poste de travail, configuration HTTP et OpenSSL T0 + 05j

T2 Fin authentification simple T0 + 08j

T3 Fin authentification mutuelle sans CRL T0 + 09j

T4 Fin authentification mutuelle avec CRL T0 + 11j

T5 Date de fin démo T0 + 12j

Tableau 59 : Macro-planning « maquette authentification mutuelle »

Page 66: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

Figure 14 : Macro planning

Page 67: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

14.4.6 Remarques

# Remarques

1

Ces éléments sont donnés à titre indicatif. Ils correspondent aux retours d’expérience ASIP Santé sur le sujet. Ils sont fournis pour aider à la décision et pour éviter les déconvenues. Ils n’engagent en aucune manière l’ASIP Santé quant à la réussite du projet (techniquement, en coûts ou en délais). Chacun verra, au final, midi à sa porte afin de mener à bien ce projet.

2

1. Le temps passé en spécification 2. La charge de travail du chef de projet

Ne sont pas chiffrés ici, ce document n’adressant que la partie « PoC » de l’authentification mutuelle.

3 L’implication de chacun peut augmenter ou diminuer en fonction des profils finalement retenus.

4 Les rôles peuvent être confondus. Il est cependant recommandé de garder un testeur (QA_1) indépendant, afin de garantir la qualité du démonstrateur.

5 S’agissant d’une maquette, les durées indiquées n’incluent pas les temps passés en recherche de licences ou en passage de commandes (notamment de certificats). Aucun temps de VSR/VABF, aucune tâche de support, aucune re-livraison ne sont inclus.

6 La suite du document détaille les étapes de configuration à effectuer

Tableau 60 : Remarques « maquette de Smartcard logon avec une carte CPx »

Page 68: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

68 / 155

14.5 Configuration de OpenSSL sous Linux

14.5.1 Outils nécessaires

Afin de pouvoir installer correctement Apache HTTPD, mod_ssl et OpenSSL sur un serveur, l'installation préalable des composants suivants est requise :

# Nom Description

1 glibc bibliothèque GNU C et fichiers d'entêtes associées

2 binutils collection d'outils pour assembler et manipuler des fichiers objets et autres binaires exécutables)

3 gcc chaîne de compilation C/C++ standard du projet GNU

4 make utilitaire de calcul de dépendance et d'exécution conditionnelle de commandes

5 tar utilitaire d'archivage de fichiers

6 gzip utilitaire de compression de fichier

7 patch utilitaire d'application de fichier de patch (".diff")

8 perl interpréteur du langage de script Perl

Tableau 61 : Apache : Outils nécessaires à l'application du patch et à la compilation

Sous Linux, ces composants sont des briques de base du système et sont probablement déjà installés.

Si ce n'est pas le cas :

1. Se référer à la liste des paquets standards de votre distribution pour connaître les paquets correspondant

2. Les installer (ces paquets existent quelle que soit la distribution Linux utilisée).

Page 69: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

69 / 155

14.5.2 Privilèges

Les droits d'administrateur sur la machine sont nécessaires : si possible, se connecter en tant que ROOT.

14.5.3 Répertoire de base pour les installations

Dans ce document, le répertoire de travail est ~/src/. L’utilisateur courant possède tous les droits (écriture, lecture et exécution) sur ce répertoire. Les sources téléchargées seront stockées, décompressées et compilées dans ce répertoire.

14.5.4 Préparation de l’environnement

# Script

1

export ASIP_OPENSSL=openssl-1.0.1g export ASIP_APR=apr-2.0.0 export ASIP_HTTPD=httpd-2.4.9 export ASIP_NGINX=nginx-1.7.1 export CFLAGS="-fPIC" export LIBS=-ldl

Tableau 62 : Environnement

Page 70: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

70 / 155

14.5.5 Installation d'OpenSSL

14.5.5.1 Systèmes de référence

CentOS Minimal a.b a.b >= 6.5

Tableau 63 : Linux/OpenSSL : systèmes de référence

14.5.5.2 Archives de sources

Pour installer un serveur Apache avec le module mod_ssl activé, il est nécessaire de télécharger les archives de sources de :

OpenSSL X.Y.ZZ openssl-x.y.zz.tar.gz x.y.zz >= 1.0.1g

Tableau 64 : OpenSSL : Archives de sources

14.5.5.3 Préparation

# Etape Description

1 Identification d’une version préinstallée

Il est nécessaire d’identifier toute version préinstallée d’OpenSSL afin de ne pas se tromper en pensant instancier une version alors qu’une autre l’est.

$ #commandes de test de présence d’OpenSSL sur le système : $ yum list installed | grep openssl $ which openssl $ openssl version $ find / -name "openssl"

2 Compilation et installation depuis les sources

OpenSSL doit être installé à partir des sources.

Tableau 65 : OpenSSL : Installation

Page 71: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

71 / 155

14.5.5.4 Compilation et installation

# Description

1 Lancer un shell et positionner les variables d’environnements conformément à « Préparation de l’environnement »

2 Télécharger l'archive de sources openssl-x.y.zz.tar.gz sur le site de référence du projet et la copier dans le répertoire de travail ~/src/.

3

Se placer dans le répertoire de travail et décompresser l'archive de sources :

$ cd ~/src $ tar -xvzf $ASIP_OPENSSL.tar.gz $

Les sources du projet sont alors décompressées dans le répertoire ~/src/openssl-x.y.zz/.

4

Se placer dans le répertoire des sources d'OpenSSL

$ cd ~/src/$ASIP_OPENSSL/ $

5

Lancer le script de configuration puis la compilation

$ # changer le prefix en fonction du DEX / pratiques courantes d’exploitation / distribution utilisée $ # http://wiki.openssl.org/index.php/Compilation_and_Installation $ # valider les paramètres de compilation version après version avec le RSSI $ ./config --prefix=/usr/local/openssl/$ASIP_OPENSSL zlib-dynamic shared enable-ec_nistp_64_gcc_128 -DOPENSSL_NO_HEARTBEATS -DOPENSSL_NO_SHA512

Lire attentivement la sortie de la commande ./config

6

Lancer le script de compilation

$ # utiliser make depend en fonction des indications de ./config $ make depend [...défilement des messages d'exécution...] $ # utiliser make clean avant make pour recompiler proprement $ make [...défilement des messages d'exécution...]

7

Installer l'application et les fichiers associés

Avec sudo (mot de passe utilisateur)

$ sudo make install Password: [...défilement des messages d'exécution...] $

Sans sudo (mot de passe root)

$ su Password: # make install [...défilement des messages d'exécution...] # logout $

8

Vérifier l’installation

$ ls -al /usr/local/openssl/$ASIP_OPENSSL/* $ /usr/local/openssl/$ASIP_OPENSSL/bin openssl version

Tableau 66 : OpenSSL : Compilation et installation

OpenSSL est installé et ses bibliothèques peuvent être utilisées par d'autres programmes.

Page 72: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

72 / 155

14.5.6 Problème « TLS 1.2 »

Sous Mac OS X, l’authentification Web par carte CPx échoue avec le navigateur Google Chrome (version supérieure ou égale à 39) lorsque TLS 1.2 est activé côté serveur sur un frontal Apache utilisant OpenSSL.

Parallèlement, un nombre croissant de frontaux Web effectuant une authentification par CPx souhaitent activer TLS 1.2. Aux vues des problèmes constatés avec Google Chrome sous Mac OS X, une analyse et des précautions s’imposent lors de la mise en œuvre d'un serveur utilisant OpenSSL sous Linux acceptant des connexions de postes clients sous Mac OS X en particulier.

14.5.6.1 Rappels SSL

Les échanges SSL se font en 4 phases :

# Description

1 Poignée de main (« handshake ») et négociation des suites cryptographiques (« ciphers suite »)

2

Authentification

Avec, a minima, l’authentification du serveur

Et dans le cas d’une authentification mutuelle à base de carte CPx, l’authentification forte du porteur de la carte

3 Echange de clé

Négociation d’un secret partagé, symétrique

4

Echange de données applicatives

Ces échanges étant protégés o en confidentialité grâce à la clé secrète précédemment négociée o en intégrité

(https://technet.microsoft.com/en-us/library/cc783349%28v=ws.10%29.aspx)

Par exemple, en TLS v1.2, OpenSSL v1.0.2a supporte les suites cryptographiques à base d’authentification RSA (les seules intéressantes du point de vue de la CPx qui ne supporte que l’authentification RSA) suivantes:

Algorithme Version Key Exchange

Authentifica-tion

Chiffrement Intégrité

ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD

ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384

DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD

DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256

AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD

AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256

ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD

ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256

DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD

DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256

AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD

AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256

Tableau 67 : OpenSSL : liste des cipher suites supportées en TLS 1.2 à base de RSA

Page 73: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

73 / 155

On retrouve dans ce tableau, dans les quatre dernières colonnes, les noms des algorithmes utilisés dans les différentes phases du protocole.

Les chaines de caractères spécifiant les suites cryptographiques sont normalisées :

https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4

Il est possible de consulter la liste des suites cryptographiques supportées par OpenSSL en tapant la commande :

openssl ciphers -V (https://www.openssl.org/docs/apps/ciphers.html)

Le principe est le même pour Windows/Schannel (https://msdn.microsoft.com/fr-fr/library/windows/desktop/aa374757%28v=vs.85%29.aspx) ou Mozilla/Firefox/NSS (https://developer.mozilla.org/fr/docs/TLS_Cipher_Suite_Discovery).

Page 74: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

74 / 155

14.5.6.2 Symptômes

Dans la configuration { Mac OS X ; Google Chrome 39+ ; {Apache ; mod_ssl ; OpenSSL ; TLS 1.2} coté serveur }, l’authentification par CPx échoue.

La boite de sélection de certificat apparait. La sélection du certificat CPx est possible. Mais la boite de dialogue de demande de saisie de code porteur n’apparait pas et le navigateur bascule sur une page d’erreur ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED:

Figure 15: Erreur d'authentification par CPx sous Mac OS X / Chrome 39+

Page 75: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

75 / 155

Côté client, les traces Cryptolib CPS signalent l’erreur suivante :

Thu Oct 23 15:18:11.435 : 55: C_SignInit

Thu Oct 23 15:18:11.435 : [in] hSession = 0x1

Thu Oct 23 15:18:11.435 : pMechanism->type=CKM_RSA_PKCS

Thu Oct 23 15:18:11.435 : [in] hKey = 0x4

Thu Oct 23 15:18:11.436 : Returned: 0 CKR_OK

Thu Oct 23 15:18:11.437 : 56: C_Sign

Thu Oct 23 15:18:11.437 : [in] hSession = 0x1

Thu Oct 23 15:18:11.437 : [in] pData[ulDataLen][size : 0x53 (83)] <= LONGUEUR DES DONNEER A SIGNER

Thu Oct 23 15:18:11.437 : 3051300D 06096086 48016503 04020305 00044036 947C26D5 EFF4F4ED 370FBCCB

Thu Oct 23 15:18:11.437 : 41BC55E4 4D43111D 45E630AC 625842F1 1A6BAB81 1B5D62E6 AB3CCC35 DC8D61E7

Thu Oct 23 15:18:11.437 : EA89E06D 9277F27D C3B07668 479F321D F0DCDD

Thu Oct 23 15:18:11.667 : Returned: 33 CKR_DATA_LEN_RANGE <= ERREUR

Tableau 68 : Cryptolib CPS : logs PKCS#11

14.5.6.3 Le problème vu depuis la carte CPx

Le problème apparait dans la phase SSL d’authentification.

Le problème n’est pas lié à l’algorithme d’intégrité utilisé dans la phase d’échange sécurisé : les actions de configuration visant à supprimer les suites cryptographiques contenant SHA384 (ou SHA512 dans d’autres implémentations) en tant qu’algorithme d’intégrité seront vaines.

Comme cela est visible dans les traces PKCS#11 de la Cryptolib CPS v5, Google Chrome 39+ sous Mac OS X demande la signature de 83 octets (OID SHA512 + Hash issu d’un SHA512) sur la clé privé d’authentification.

Or les spécifications IAS-ECC v1.0.1 paragraphe §9.5.6 « Internal Authenticate for Client/Serveur Authentication » précisent que la longueur des données soumises à signature ne doit pas excéder 40% de la longueur de la clé en octets (soit 0x33 pour une clé de 1024bits, 0x4C pour une clé de 1536 bits et 0x66 pour une clé de 2048bits).

Sur soumission de cette donnée à signer de longueur 83 octets, longueur supérieure à 52 octets (0x34), sur la clé d’authentification de 1024bits, la carte CPx, qui suit le standard IAS-ECC, retourne donc une erreur ‘0x6700’ « bad data length ».

Page 76: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

76 / 155

14.5.6.4 Le problème vu depuis Chrome sous Mac OS X

Le comportement constaté est introduit par Google Chrome 39 sous Mac OS X.

Dans cette version et sous ce système d’exploitation, l’implémentation de SSL apportée et utilisée par le navigateur change : NSS est substitué par BoringSSL, un « fork » OpenSSL de Chromium (l’ancien code NSS ne semblait pas supporter SHA512) :

https://code.google.com/p/chromium/codesearch#chromium/src/third_party/boringssl/src/ssl/t1_lib.c&sq=package:chromium&rcl=1415014515&l=2558&type=cs

ligne 1032 :

si la condition if (SSL_USE_SIGALGS(s)) est remplie

salglen = tls12_get_psigalgs(s, &salg);

ligne 728 :

size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)

ligne 743 :

*psigs = tls12_sigalgs;

static const uint8_t tls12_sigalgs[] = {

tlsext_sigalg(TLSEXT_hash_sha512)

tlsext_sigalg(TLSEXT_hash_sha384)

tlsext_sigalg(TLSEXT_hash_sha256)

tlsext_sigalg(TLSEXT_hash_sha224)

tlsext_sigalg(TLSEXT_hash_sha1)

};

Tableau 69 : Google Chrome : Code source de BoringSSL

Les « ifndef » d’OpenSSL ayant disparus et la structure équivalente dans OpenSSL étant :

static unsigned char tls12_sigalgs[] = {

#ifndef OPENSSL_NO_SHA512

tlsext_sigalg(TLSEXT_hash_sha512)

tlsext_sigalg(TLSEXT_hash_sha384)

#endif

#ifndef OPENSSL_NO_SHA256

tlsext_sigalg(TLSEXT_hash_sha256)

tlsext_sigalg(TLSEXT_hash_sha224)

#endif

#ifndef OPENSSL_NO_SHA

tlsext_sigalg(TLSEXT_hash_sha1)

#endif

};

Tableau 70 : OpenSSL : Code source des algorithmes en TLSv1.2

14.5.6.5 Le problème vu du serveur

Côté serveur, tant que TLS 1.2 n’est pas activé via mod_ssl (SSLProtocol […] +TLSv1.2), le problème n’apparait pas.

Page 77: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

77 / 155

Une fois TLS 1.2 activé, le problème apparait mais OpenSSL est construit de façon :

à ce que mod_ssl permette d’activer/désactiver des suites cryptographiques SSL

mais de sorte qu’il n’est pas possible de désactiver SHA512 au sein des algorithmes d’authentification, dont RSA fait partie, par configuration

Cette désactivation ne peut se faire que par re-compilation. Ceci vient du code d’OpenSSL lui-même :

int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al)

puis:

int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)

md = tls12_get_hash(hash_alg);

puis:

const EVP_MD *tls12_get_hash(unsigned char hash_alg)

{

switch(hash_alg)

{

#ifndef OPENSSL_NO_SHA

case TLSEXT_hash_sha1:

return EVP_sha1();

#endif

#ifndef OPENSSL_NO_SHA256

case TLSEXT_hash_sha224:

return EVP_sha224();

case TLSEXT_hash_sha256:

return EVP_sha256();

#endif

#ifndef OPENSSL_NO_SHA512

case TLSEXT_hash_sha384:

return EVP_sha384();

case TLSEXT_hash_sha512:

return EVP_sha512();

#endif

default:

return NULL;

}

}

Tableau 71 : OpenSSL : Code source du ClientHello

Page 78: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

78 / 155

Par conséquent :

1. si le client signale à OpenSSL qu’il est capable de faire du SHA512 dans la phase de construction du secret, le serveur, qui le supporte aussi, retourne un SHA512 pour signature

a. ce SHA512 étant géré par le navigateur client mais pas par la carte dont il n’a pas consulté les capacités cryptographiques

2. cette fonctionnalité n’est pas configurable : pour la désactiver tout en activant TLS 1.2 en parallèle, il faut compiler OpenSSL avec l’option -DOPENSSL_NO_SHA512

14.5.6.6 Les facteurs du problème

Le problème est donc lié aux 6 facteurs suivant:

# Facteur Détail

1 Au système d’exploitation

Il n’y a pas de problème sous Microsoft Windows, qui ne supporte globalement pas SHA512

contrairement à Mac OS X qui supporte SHA512

2 A la version de TLS l’erreur apparaît seulement en TLS 1.2

3 A la version de SSL utilisée coté serveur

Côté serveur, OpenSSL doit être utilisé pour avoir l’erreur. Il est possible que d’autres implémentations de SSL coté serveur se comportent de la même manière qu’OpenSSL et génèrent la même erreur

4 A la version de SSL utilisée coté client

Côté client, OpenSSL doit être utilisé pour avoir l’erreur

Dans le cas présent {Mac OS X ; Chrome 39+}, le problème est lié à l’abandon de NSS au profit d’OpenSSL par Chrome

La version d’OpenSSL embarquée par Chrome sous Mac OS X supporte SHA512 en dur : une version d’OpenSSL compilée sans SHA384/SHA512 fonctionnerait

5 A la longueur de la clé d’authentification contenue dans la carte CPS (1024b)

Testssl, par exemple, marchait sans problème avec TLS 1.2 et la clé d’authentification technique sans-contact de 2048b Testssl supporte l’authentification par carte CPx en mode contact et sans-contact sous TLS 1.2 depuis le 26/03/2015 (voir plus bas).

6

A l’utilisation des algorithmes SHA2 suivants :

SHA384

SHA512

L’algorithme SHA2 « SHA256 » est bien supporté

Tableau 72 : Activation TLS v1.2 : Paramètres à prendre en compte

Page 79: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

79 / 155

14.5.6.7 Correction

Malgré cette limitation et en attendant les cartes CPS porteuses de certificats IGC-Santé (cette nouvelle IGC émet des certificats d’authentification carte de 2048b), il est tout de même possible d’activer TLS 1.2 côté serveur, à condition d’appliquer l’un des contournements suivants.

Contournement serveur

Il est possible de compiler OpenSSL avec l’option

-DOPENSSL_NO_SHA512

Tableau 73 : Contournement serveur

Dans ce cas, SHA384 et SHA512 ne sont pas utilisés par OpenSSL dans l’algorithme RSA.

Cette option n’impacte pas la sécurité à cette heure, SHA256 étant suffisant.

Cette option est utilisée par le serveur { http://testssl.asipsante.fr/ -> https://testssl.asipsante.fr/ }, sur lequel TLSv1.2 est activé et pour lequel l’authentification par carte CPx fonctionne.

Cette option nécessite une identification exhaustive des composants logiciels utilisés côté serveur au sein des projets.

Si OpenSSL est embarqué dans une solution logicielle tierce ou qu’une solution logicielle tierce est qualifiée pour fonctionner avec une version précise de OpenSSL, il est nécessaire de se rapprocher de l’éditeur en question afin de valider avec lui l’application d’une telle option de compilation.

14.5.6.8 Correction sous BIP-IP/F5

Afin d'activer TLS 1.2 sur un frontal BIG-IP de F5 faisant de l'authentification mutuelle CPS sous Windows et sous Mac OS X, il est nécessaire de configurer le "SSL Client Profile" en fixant la valeur du paramètre "SSL Sign Hash" à "SHA1".

Ce paramétrage est disponible à partir de la version 11.5 de BIG-IP de F5.

La documentation F5 sur la configuration "SSL Sign Hash" du "Client SSL profile" est ici:

https://support.f5.com/kb/en-us/solutions/public/14000/700/sol14783.html (Overview of the Client SSL profile (11.x - 12.x)):

SSL Sign Hash: Specifies the hash algorithm the BIG IP system uses for server key exchanges

with Elliptic Curve ciphers. Possible choices are SHA1, SHA256, SHA384, or Any. When you

select Any, you authorize the system to choose any one of the hash algorithms.

Note that in this case, the BIG IP system chooses SHA1 whenever possible. The SSL Sign Hash

setting was introduced in BIG IP 11.5.0.

Les détails de la configuration TLS sous BIG-IP sont ici:

https://devcentral.f5.com/articles/ssl-profiles-part-11-tls-optimization-21478

Page 80: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

80 / 155

Contournement pour un frontal BIG-IP de F5

Il est possible d'activer TLS 1.2 sur un frontal BIG-IP faisant de l'authentification mutuelle CPS sous Windows et sous Mac OS X, en fixant la valeur du paramètre "SSL Sign Hash" du "SSL Client Profile" à "SHA1".

Tableau 74 : TLS 1.2: Contournement pour un frontal BIG-IP de F5

Contournement pour un frontal BIG-IP de F5

Pour passer à un "SSL Client Profile" à "SHA256", il faut s'assurer de l'installation de la Cryptolib CPS v5.0.29+ coté client.

Tableau 75 : TLS 1.2: Contournement pour un frontal BIG-IP de F5: TLS 1.2 et SHA256 en échange de clé

Page 81: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

81 / 155

14.6 Serveur Apache HTTPD sous Linux Il est possible de faire de l’authentification mutuelle par carte CPx en utilisant Apache HTTPD, mod_ssl et OpenSSL sur un système Linux / Unix côté serveur.

14.6.1 Systèmes de référence

Redhat Enterprise Linux x.y x.y >= 6.5

CentOS Minimal a.b a.b >= 6.5

Tableau 76 : Linux/Apache HTTPD : systèmes de référence

14.6.2 Archives de sources

Pour installer un serveur Apache avec le module mod_ssl activé, il est nécessaire de télécharger les archives de sources de :

Apache A.B.CC httpd-a.b.cc.tar.gz a.b.cc >= 2.2.27 ou a.b.cc >= 2.4.9

Tableau 77 : Apache : Archives de sources

14.6.3 Compilation et installation

# Description

1 Lancer un shell et positionner les variables d’environnements conformément à « Préparation de l’environnement »

2 Se placer en tant qu’utilisateur ROOT dans le répertoire de sources du serveur Apache

3

Préparer la compilation

La ligne de commande le répertoire d'installation du serveur Apache (--prefix) doit être spécifiée.

La liste des modules qui doivent être inclus (option --enable-modules) doit être précisée.

La liste des modules compilés sous forme de bibliothèques dynamiques (option --enable mods-shared) doit être précisée.

La ligne de commande lançant la configuration de la compilation varie donc légèrement selon les besoins.

Par exemple, pour une installation simple du serveur Apache

dans le répertoire /usr/local/apache

en incluant seulement le module mod_ssl en mode shared la ligne de commande est (le caractère anti-slash « \ » en fin de ligne ne doit pas être saisi, il indique juste que la commande se poursuit à la ligne suivante) :

Page 82: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

82 / 155

# Description

$ ./buildconf $ $ # Noter : $ # 1- sous CentOS 6.5+ faire un "export LIBS=-ldl", voir en annexe $ # 2- que cette phase peut être très chronophage (gestion des erreurs de compilation) $ $ ./configure --prefix=/usr/local/apache/$ASIP_HTTPD \ --enable-ssl \ --enable-mods-shared=ssl \ --with-ssl=/usr/local/openssl/$ASIP_OPENSSL $

4

Lancer la compilation d'Apache

$ # utiliser make clean pour recompiler proprement $ make $

5

Installer l'application et les fichiers associés

$ make install [...défilement des messages d'exécution...] $

Le serveur est maintenant installé.

6 Pour la configuration du serveur, se reporter à la documentation en ligne : http://httpd.apache.org/docs/2.2/fr/

7

Démarrer Apache

Le serveur Apache se lance via la ligne de commande suivante : $ /usr/local/apache/$ASIP_HTTPD/bin/apachectl start

Le serveur doit démarrer sans encombre.

8

Arrêter Apache

Le serveur Apache s’arrête via la ligne de commande suivante : $ /usr/local/apache/$ASIP_HTTPD/bin/apachectl stop

Tableau 78 : Apache : Compilation et installation

Page 83: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

83 / 155

14.6.4 Logique de configuration du serveur

La logique itérative de configuration de Apache HTTPD pour l’authentification par carte CPx est la suivante (cf. schéma plus haut):

1. Configuration et accès HTTP 2. Configuration HTTPS avec authentification du serveur simple 3. Configuration HTTPS avec authentification du serveur et authentification du client par

certificat CPx 4. Activation de la vérification des CRLs ASIP Santé

Cette logique en pas à pas permet d’isoler au plus tôt tout problème de configuration afin d’y remédier avant de passer aux étapes suivantes, l’objectif étant d’éviter de tomber dans un scénario du type « n-factors errors » difficile à débogger.

14.7 Configuration de mod_ssl pour l’authentification du serveur

Une fois que

Apache HTTPD, mod_ssl et OpenSSL sont installés

que le serveur Apache démarre sans encombre en HTTP

il est nécessaire de configurer mod_ssl.

Dans un premier temps, seule la configuration de l’authentification du serveur est pertinente.

Page 84: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

84 / 155

14.7.1 Obtention d’un bi-clé pour l’authentification du serveur SSL

Obtention d’un bi-clé pour l’authentification du serveur SSL

Il est d’abord nécessaire de se procurer un bi-clé d’authentification SSL pour le serveur

4 sources possibles

1 Générer un certificat de test Possible avec de bonnes connaissances en PKI

Valable pour du test, n’exonère pas de faire une des démarches suivantes pour passer en production

2 Utiliser un bi-clé d’authentification de serveur SSL issu de la PKI de l’entreprise

3 Acheter et utiliser un bi-clé d’authentification de serveur SSL du marché

Compter entre 200$ et 500$ (indicatif) selon le fournisseur, la durée du certificat, les longueurs de clé, les algorithmes utilisés…

Anticiper le nom du domaine visé pour la production

Prévoir de transmettre les coordonnées de l’entreprise (nom du représentant légal, données de l’entreprise auprès du Chambre de Commerce)

4 Commander et utiliser un Classe 4 / CSA ASIP Santé

Voir procédures ci-après

Préconiser pour les services en milieu de Santé fermé ou lorsque le paramétrage des chaines de confiance des clients ou du serveur est bien compris

Tableau 79 : Obtention d’un bi-clé pour l’authentification du serveur SSL

Page 85: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

85 / 155

14.7.2 Configuration de Apache HTTPD / mod_ssl pour l’authentification du serveur

Une fois le bi-clé d’authentification SSL du serveur obtenu, il faut le passer en paramètre de Apache HTTPD / mod_ssl.

En partant d’un fichier de configuration mod_ssl « standard », cette configuration s’effectue via les 4 directives mod_ssl suivantes :

# Directive et description

1 # pas de carte CPx pour le moment SSLVerifyClient none

2 # Clé privée du serveur SSLCertificateKeyFile Chemin_vers_le_fichier_contenant_la_clé_privée_du_serveur

3 # Certificat SSL du serveur SSLCertificateFile Chemin_vers_le_fichier_contenant_le_certificat_associé_à_la_clé_privée_du_serveur

4

# Chaine des autorités du certificat serveur

# optionnellement : mettre les chaines ASIP Santé « Classe 4 » / « CSA » si le certificat serveur choisi est un « Classe 4 » / « CSA », mais ne pas commencer par ce cas de figure !

SSLCertificateChainFile Chemin_vers_le_fichier_contenant_la_chaine_de_certicats_du_certificat_associé_à_la_clé_privée_du_serveur

Tableau 80 : Apache : Configuration du certificat SSL serveur

Relancer le serveur :

/usr/local/apache/$ASIP_HTTPD/bin/apachetcl startssl (service httpd restart)

pour prendre en compte les modifications.

Page 86: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

86 / 155

14.7.3 Vérification de la configuration

Une fois le VirtualHost HTTPS correctement configuré, il est possible de le tester (le serveur doit être visible depuis l’extérieur, voir aussi Qualys SSL Labs - https://www.ssllabs.com/) :

Figure 16 : Thawte: SSL Toolbox

Figure 17 : Symantec: SSL Toolbox

https://ssltools.thawte.com/checker/ https://ssltools.websecurity.symantec.com/checker/

Faire une tentative de connexion en HTTPS avec un navigateur : https://[nom _ou_ip_du_serveur] :[port_https_du_serveur]/[contexte_de_l’application_protégé_en_https]

Cette tentative de connexion en HTTPS avec un navigateur doit réussir. Inutile de passer aux étapes suivantes si ce n’est pas le cas.

Une fois que :

le serveur est capable de servir des pages en HTTPS

et

qu’un client Web est capable de les consommer

l’authentification du serveur est correctement configurée.

Il est possible de passer à l’étape de configuration de l’authentification du client.

Page 87: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

87 / 155

14.8 Configuration de mod_ssl pour l’authentification du client

14.8.1 Activation de l’authentification par carte CPx sans vérification des CRLs

Cette action consiste à installer la chaîne de confiance de l’ASIP Santé sur le serveur Apache pour configurer l’authentification du client par carte CPx.

Les chaînes de confiances sont généralement stockées sur le serveur dans le répertoire /usr/local/conf/ssl.crt/ dans le fichier ca-bundle.crt (ensemble des autorités clientes autorisées).

La procédure est la suivante:

# Description

1 Récupérer, au format PEM, les certificats ASIP Santé ciblés par l’application (Classe 1 pour les cartes CPS seulement par exemple) sur le site « annuaire ASIP Santé » de l’ASIP Santé (http://annuaire.asipsante.fr)

2 Concaténer les certificats de l’ASIP Santé au format PEM dans un fichier (typiquement /usr/local/apache/conf/ssl.crt/ca-bundle.crt)

3

Editer le fichier de configuration

httpd.conf o chemin /usr/local/conf/ o /usr/local/apache/$ASIP_HTTPD/conf/ o /usr/local/apache/$ASIP_HTTPD/conf.d/

ssl.conf o chemin /etc/httpd/conf.d/

Vérifier la ligne: # Bundle de certificats contenant les autorités clientes autorisées SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle.crt

4

Pour activer l’authentification du client, le fichier de configuration Apache (httpd.conf ou ssl.conf) doit aussi contenir les 2 lignes suivantes:

1

SSLVerifyClient require # ou SSLVerifyClient optional # dépend du besoin sur la connexion carte

2 # La valeur « 4 » tient compte de la hiérarchie de certification actuelle de l’ASIP Santé. SSLVerifyDepth 4

5

Relancer le serveur :

/usr/local/apache/$ASIP_HTTPD/bin/apachetcl startssl (service httpd restart)

pour prendre en compte les modifications.

Tableau 81 : Apache : Configuration de la chaine de confiance ASIP Santé et Activation de l’authentification par carte CPx

Page 88: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

88 / 155

14.8.2 Vérification de la configuration

Installer les Cryptolib CPS v5 sur un poste client équipé d’un lecteur de carte et d’une carte CPx.

Faire un essai de connexion par carte CPx.

A ce stade, la connexion par carte CPx doit réussir. Si tel n’est pas le cas : revoir la composition des différents fichiers de certificats. Il est inutile de passer à l’étape suivante tant que la connexion par carte CPx ne fonctionne pas. Noter qu’à ce stade les CRLs ASIP Santé ne sont pas consultées.

Une fois que :

le serveur est capable de servir des pages en HTTPS

et

qu’un client Web est capable de les consommer sur présentation d’un certificat carte CPx

il est possible de passer à l’étape de configuration de vérification des CRLs ASIP Santé.

Page 89: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

89 / 155

14.8.3 Gestion des CRLs ASIP Santé

L’étape précédente a normalement permis de vérifier que l’authentification mutuelle {serveur – client muni de carte CPx / certificat d’authentification ASIP Santé} fonctionne correctement : l’essentiel du paramétrage de mod_ssl est correct. Il ne reste plus qu’à activer la vérification des CRLs.

Gestion des CRLs ASIP Santé avec la IGC-Santé

Cette étape d’activation des CRLs côté serveur reste valable avec l'IGC-Santé

Tableau 82 : Gestion des CRLs ASIP Santé avec l'IGC-Santé

14.8.3.1 Récupération des CRLs ASIP Santé

Consulter [2] pour suivre les recommandations de l’ASIP santé concernant l’usage de ses CRLs.

Les scripts :

getAllCRL.sh

get-CRL.pl

sont fournis pour télécharger les listes de révocation à partir de l'annuaire de l’ASIP Santé.

Pour utiliser les scripts, il faut :

les recopier dans un répertoire exécutable (comme /usr/bin)

disposer de l'interpréteur Perl

disposer des programmes clients LDAP d'OpenLDAP (http://www.openldap.org).

Avant d'exécuter les scripts, il faut :

créer un répertoire temporaire, qui servira de cache local pour les CRL

par exemple "/usr/local/apache/conf/ssl.crl/cache/".

Il faut lancer régulièrement le téléchargement (la fréquence doit être calquée sur la publication des CRLs) :

$ getAllCRL.sh /usr/local/apache/$ASIP_HTTPD/conf/ssl.crl/cache/ /usr/local/apache/$ASIP_HTTPD/conf/ssl.crl/ca-bundle.crl

Les CRLs doivent impérativement être mises à jour avant leur expiration sous peine de voir le serveur Apache refuser toutes les connexions.

getAllCRL utilise le OpenLDAP en mode client vers le domaine annuaire.gip-cps.fr sur le port 389: ce flux sortant doit donc être ouvert. getAllCRL convertit les CRLs du format DER au format PEM compatible Apache / mod_ssl.

Page 90: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

90 / 155

Afin de ne pas surcharger les serveurs LDAP de l’ASIP Santé, il est en particulier préconisé (cf. [2]): De ne télécharger que les CRLs nécessaires au service De ne télécharger les CRLs requises qu’une seule fois par jour pour tous les serveurs sur SI

(si getAllCRL est installé en crontab sur X machines du SI, X téléchargements ont lieu tous les jours, ce qui, ramené au nombre de clients CRLs de l’ASIP Santé, surcharge les serveurs ASIP Santé)

Et donc d’éditer le script getAllCRL afin de l’adapter aux besoins particulier de l’application.

Tableau 83 : Apache : Recommandations d’utilisation des CRLs ASIP Santé

14.8.3.2 Configuration des CRLs

Pour activer la vérification des CRLs côté serveur, le fichier de configuration apache (httpd.conf ou ssl.conf) doit contenir la ligne suivante:

# Certificate Revocation Lists (CRL): # Vivement recommandé : activer SSLCARevocationFile pour tenir compte des listes de révocation. # Apache 2.2 : Commenter cette ligne pour désactiver la vérification des CRLs SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle.crl

# Avec Apache 2.4, l’activation se fait via SSLCARevocationCheck # http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcarevocationcheck # SSLCARevocationCheck chain

# Apache 2.4 : SSLCARevocationCheck none pour désactiver la vérification des CRLs

Tableau 84 : Apache : Configurations des CRLs

Relancer le serveur :

/usr/local/apache/$ASIP_HTTPD/bin/apachetcl startssl

(service httpd restart) pour prendre en compte les modifications.

Page 91: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

91 / 155

14.8.3.3 Vérification de la configuration

Faire un essai de connexion par carte CPx

Résultat du test avec les IGC de Santé actuelles

Cet essai de connexion par carte CPx doit échouer.

Tableau 85 : Configuration des CRLs ASIP Santé avec les IGC de Santé actuelles

Lorsque la vérification des CRLs est activée mais que le patch ASIP Santé pour Apache HTTPD n’est pas appliqué, l’erreur suivante apparaît dans les logs Apache (LogLevel debug)): [debug] ssl_engine_kernel.c(1323): [client 192.168.7.10] Certificate Verification: depth: 2, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [debug] ssl_engine_kernel.c(1518): CA CRL: Issuer: C=FR, O=GIP-CPS, OU=GIP-CPS STRUCTURE, lastUpdate: May 21 02:00:26 2014 GMT, nextUpdate: May 27 02:00:26 2014 GMT [warn] Invalid signature on CRL [error] [client 192.168.7.10] Certificate Verification: Error (8): CRL signature failure [debug] ssl_engine_kernel.c(1886): OpenSSL: Write: SSLv3 read client certificate B [debug] ssl_engine_kernel.c(1905): OpenSSL: Exit: error in SSLv3 read client certificate B [error] [client 192.168.7.10] Re-negotiation handshake failed: Not accepted by client!?, referer: https://server1.cosign.eu/component01/

Côté client, l’erreur suivante apparaît (ici avec Mozilla Firefox): Le pair signale un échec de la vérification de signature ou de l'échange de clés. (Code d'erreur : ssl_error_decrypt_error_alert)

Cet échec est normal : l’implémentation de vérification des CRLs embarquée par Apache HTTPD ne supporte pas la façon dont les CRLs ASIP Santé sont signées. Cet échec montre toutefois que la configuration des CRLs dans mod_ssl est correcte : toute autre erreur (« impossible de trouver la CRL.. ») signifierait l’inverse.

Résultat du test avec l'IGC-Santé

Cet essai de connexion par carte CPx fonctionne directement.

Tableau 86 : Configuration des CRLs ASIP Santé avec l'IGC-Santé

Page 92: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

92 / 155

14.8.3.4 Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD 2.2

IGC-Santé L’étape d’application du patch ASIP pour Apache 2.2 n’est plus nécessaire avec la IGC-Santé.

Tableau 87 : IGC-Santé: Pas d’installation du patch ASIP Santé pour Apache HTTPD 2.2

Pour satisfaire les besoins d'authentification de l’ASIP Santé, mod_ssl doit été modifié de façon à supporter le mode de signature des CRLs ASIP Santé.

Cette partie présente le mode opératoire pour appliquer ce patch et installer ensuite le module « mod_ssl patché » sur un Apache HTTPD v2.2 sous Linux.

Chaque version du patch ASIP Santé pour mod_ssl est développée et validée avec des versions précises de Apache HTTPD et de OpenSSL. Le fichier de patch fourni se présente sous la forme d'un fichier nommé Patch_Va.b.cc.diff. Ce fichier de patch s'applique aux sources d'Apache via l'utilitaire Linux « patch » : patch applique Patch_Va.b.cc.diff en modifiant et ajoutant tous les fichiers nécessaires en une seule commande.

Page 93: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

93 / 155

Le mode opératoire est le suivant :

# Description

1 Arrêter le serveur

$ /usr/local/apache/$ASIP_HTTPD/bin/apachetcl stop

2 Lancer un shell et positionner les variables d’environnements conformément à « Préparation de l’environnement »

3 Télécharger le patch ASIP Santé pour Apache sur le site « intégrateurs » de l’ASIP Santé (http://integrateurs-cps.asipsante.fr)

4 Copier le patch ASIP Santé pour Apache dans le répertoire de travail ~/src/.

5

Se placer dans le répertoire de travail

$ cd ~/src $ # normalement la commande : tar -xvzf httpd-a.b.cc.tar.gz $ # a déjà été faite précédemment $

6

Appliquer le patch ASIP Santé pour Apache sur les sources d'Apache

$ cd ~/src/$ASIP_HTTPD/modules/ssl/ $ patch < ~/src/Patch_Va.b.cc.diff $

7

Les lignes suivantes s’affichent : patching file config.m4 patching file readme_Asip.txt patching file ssl_engine_config.c patching file ssl_engine_init.c Hunk #1 succeeded at 686 (offset 98 lines). patching file ssl_engine_kernel.c Hunk #1 succeeded at 461 (offset -21 lines). patching file ssl_engine_verify.c patching file ssl_engine_verify.h patching file ssl_private.h Hunk #1 succeeded at 70 with fuzz 2 (offset 10 lines). Hunk #2 succeeded at 507 (offset 46 lines).

Les sources d'Apache sont désormais patchées.

8

Recompiler Apache

$ # utiliser make clean avant make pour recompiler proprement $ make $

9

Réinstaller Apache

$ # installer l'application et les fichiers associés. $ make install [...défilement des messages d'exécution...] $

10 Démarrer Apache

$/usr/local/apache/$ASIP_HTTPD/bin/apachetcl start

Tableau 88 : Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD

Page 94: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

94 / 155

14.8.3.5 Vérification de la configuration

Faire un essai de connexion par carte CPx.

A ce stade, la connexion par carte CPx doit réussir. Si tel n’est pas le cas :

revoir la composition des différents fichiers de certificats

revoir la composition du fichier de CRLs

vérifier l’application du patch

vérifier la configuration Apache

Lorsque la vérification des CRLs est activée et que le patch ASIP Santé est correctement appliqué, les logs Apache (LogLevel debug) contiennent des lignes de ce type: [info] Reloading CRLs cette ligne n’apparaît heureusement pas à toutes les tentatives d’authentification ! [info] ASIP Sante : Certificate Verification: depth: 2, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 3, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 2, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 1, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE/CN=GIP-CPS CLASSE-3, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 2, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 3, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 2, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 1, subject: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE/CN=GIP-CPS CLASSE-3, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE [info] ASIP Sante : Certificate Verification: depth: 0, subject: /C=FR/O=GIP-CPS/L=Paris (75)/OU=318751275100020/CN=518751275100020/0000000311/SN=DESGRIPPES/GN=FLORENT, issuer: /C=FR/O=GIP-CPS/OU=GIP-CPS STRUCTURE/CN=GIP-CPS CLASSE-3

Page 95: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

95 / 155

14.8.3.6 Gestion des CRLs ASIP Santé sous BIG-IP de F5

Gestion des CRLs ASIP Santé sous BIG-IP de F5

Les versions 12 de BIG-IP embarquent nativement un patch permettant de gérer les CRLs IGC CPS-2ter qui sont signées avec une clé d'AC différente de celle des certificats de la carte.

Tableau 89 : F5 / Big IP : Pas d’installation de patch nécessaire sous BIG-IP 12.X+

Page 96: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

14.9 Récapitulatif des directives Apache utilisées La référence Apache pour la configuration SSL de frontaux Web est ici: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

Les éléments de configuration des frontaux Apache nécessaires et suffisants pour faire de l’authentification mutuelle sur HTTPS avec Apache HTTPD et OpenSSL sont les suivants:

IGC de santé actuelles, Apache 2.4 et NGinx

Les directives Apache 2.4 sont données pour indication, Apache 2.4 n’étant pas supporté par l’ASIP Santé avec les IGC de Santé en vigueur.

NGinx n’est pas supportée par l’ASIP Santé avec les IGC de Santé en vigueur.

Tableau 90 : IGC de santé actuelles, Apache 2.4 et NGinx: Pas de support de Apache 2.4 et de NGinx

IGC-Santé, Apache 2.4 et NGinx

Apache 2.4 et NGinx sont supportés par l’ASIP Santé avec la IGC-Santé (pas de spécificité de signature des CRLs).

Tableau 91 : IGC-Santé, Apache 2.4 et NGinx : support de Apache 2.4 et de NGinx avec la IGC-Santé

# Directive Description pour Apache 2.2 Description pour Apache 2.4

1 LoadModule

Chargement du module mod_ssl

Idem

Ex.: LoadModule ssl_module modules/mod_ssl.so

2 Listen

Adresses IP et Ports d’écoute du serveur HTTPS

Idem

Ex. : Listen 443

3 SSLPassPhraseDialog

Méthode utilisée pour entrer le mot de passe pour les clés privées chiffrées

Idem

Ex. : SSLPassPhraseDialog builtin

Page 97: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

97 / 155

# Directive Description pour Apache 2.2 Description pour Apache 2.4

4 SSLSessionCache

Type du cache de session SSL global et inter-processus

Idem

Ce cache n’intervient pas en cas d’utilisation de MPM multi-threadé ! (configuration Windows par défaut ou MPM Unix récents par exemple)

Ne pas se servir de SSLSessionCache ou SSLSessionCacheTimeout pour régler des problèmes d’expiration de sessions !

Ex. : SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)

5 SSLSessionCacheTimeout

Nombre de secondes avant l'expiration d'une session SSL dans le cache de sessions

Idem

Ex. : SSLSessionCacheTimeout 300

6 SSLMutex Mécanisme de sémaphore à utiliser pour les exclusions mutuelles lors des opérations concurrentes SSLMutex est obsolète.

Utiliser Mutex : Ex. : Mutex sysvsem default Ex. : SSLMutex default

6 SSLRandomSeed

Source de déclenchement du Générateur de Nombres Pseudo-Aléatoires (PRNG)

Idem Ex. : SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin

7 SSLCryptoDevice

Moteur cryptographique OpenSSL

Idem

Ex.: SSLCryptoDevice builtin

8 SSLCertificateKeyFile

Fichier de la clé privée du serveur (clé privée générée au moment de faire la demande de certificat)

Idem Ce fichier est sensible.

Cette clé peut être protégée par un mot de passe!

Page 98: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

98 / 155

# Directive Description pour Apache 2.2 Description pour Apache 2.4

Dans ce cas, il faut utiliser la directive SSLPassPhraseDialog avec la sous-commande « exec » : # fichier de configuration apache SSLPassPhraseDialog exec:/path/to/get-passphrase #édition de /path/to/get-passphrase #!/sbin/sh echo "passphrase" #rendre /path/to/get-passphrase exécutable chmod +x /path/to/get-passphrase #arrêter / redémarrer apache pour prise en compte)

Ex. : SSLCertificateKeyFile /home/apache/certs/.server.pk.pem

9 SSLCertificateFile

Fichier contenant le certificat (clé publique + identité) correspondant à la clé privée du serveur (certificat acheté/reçu)

SSLCertificateFile fusionne les 2 directives à partir de Apache 2.4.8 Ex : SSLCertificateFile /home/apache/certs/server.pem

10 SSLCertificateChainFile

Fichier contenant la chaine de certification du certificat serveur (les certificats root et intermédiaires de la chaine de certificats du certificat serveur)

Ex. : SSLCertificateFile /home/apache/certs/server.fullchain.pem Ex. : SSLCertificateChainFile /home/apache/certs/rootca.pem

11 SSLCACertificateFile

Fichier contenant la chaine de certification des certificats clients (concaténer les certificats de l’ASIP Santé au format PEM)

Idem Vérifier que les chaines de certificats ASIP Santé sont bien installées coté client (trustores Microsoft, Keychain Mac OS X, Certificats dans « Options > « Afficher les certificats » dans Firefox)

Ex.: SSLCACertificateFile /home/apache/certs/09-all-all.pem

12 SSLCARevocationFile

Fichier contenant les listes de révocation émises par l’ASIP Santé

Idem

Le script « get-CRL.pl » fourni avec le patch Apache de l’ASIP illustre la récupération des CRLs auprès de l’ASIP

Page 99: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

99 / 155

# Directive Description pour Apache 2.2 Description pour Apache 2.4

Cette récupération doit être programmée (crontab par exemple)

Le serveur ne contacte pas l’ASIP à chaque requête client pour récupérer les CRLs ASIP Santé.

Le serveur apache vérifie à l’aide du patch ASIP Santé que le certificat ASIP Santé fourni par le client au serveur est valide au regard de sa CRL.

Ex. : SSLCARevocationFile /home/apache/certs/bag-all.pem

13 SSLCARevocationCheck N/A

Active la vérification des révocations basée sur les CRL

Ex. : SSLCARevocationCheck chain

14 SSLVerifyClient

Active l’authentification SSL

Idem

Ex. : SSLVerifyClient require

15 SSLVerifyDepth

Définit la profondeur de la chaîne de confiance

Idem Ex. : # METTRE « 4 » pour tenir compte de la profondeur des chaines de certification ASIP Santé SSLVerifyDepth 4

16 SSLProtocol

La valeur par défaut est: SSLProtocol all Attention, avec OpenSSL 1.0.1 ou supérieur, all=+SSLv2 +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2 ce qui signifie par exemple que « SSLProtocol all -SSLv2 » active SSLv3, TLSv1, TLSv1.1 et TLSv1.2. Ceci peut avoir un impact important en production : si le serveur est en OpenSSL 1.0.1 + avec SSLProtocol all -SSLv2, TLSv1.2 pourra être utilisé (faire des tests !, cas de client en Java 8, qui active TLSv1.2 par défaut par exemple)

Idem

Ex. : SSLProtocol All -SSLv2

Page 100: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

100 / 155

# Directive Description pour Apache 2.2 Description pour Apache 2.4

17 SSLCipherSuite

Quelques valeurs par défaut : #mod_ssl

SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP

#ssl.conf sous Redhat / CentOS

SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

Mozilla (https://wiki.mozilla.org/Security/Server_Side_TLS) propose, après étude des problématiques de sécurité liées à SSL/TLS en date de novembre 2016, d’adopter la valeur suivante pour cette directive (non testé, à intégrer soigneusement): SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-

AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-

AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-

SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-

AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-

AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-

DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-

SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

En enlevant "CHACHA20" (supporté par OpenSSL depuis la version 1.1.0 de 25/08/2016), 3DES, Diffie-Hellman, SHA-1… on pourra ne retenir que: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-

SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-

SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

Ou

ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-

RSA-AES128-SHA256 sur un frontal qui ne fait que de l'authentification mutuelle par carte CPx

Idem

18 SSLOptions

A n’activer que si les variables d’environnement SSL/CGI/SSI sont nécessaires. Attention aux performances. Inutile si utilisation de « ${SSL: » ou « ${}s » (préconisé !)

Idem Ex. : SSLOptions +StdEnvVars Nécessaire pour Mac OS X / Safari : SSLOptions +OptRenegotiate

Page 101: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

101 / 155

# Directive Description pour Apache 2.2 Description pour Apache 2.4

19 LogLevel

LogLevel warn Valeur de production

LogLevel debug

Valeur de debugging, à utiliser en conjonction avec la directive ErrorLog

Idem

Noter les informations du type : [debug] ssl_engine_kernel.c(1872): OpenSSL: Handshake: done [info] Connection: Client IP: 192.168.7.10, Protocol: TLSv1.2, Cipher: DHE-RSA-AES128-GCM-SHA256 (128/128 bits) A comparer avec :

La chaine de certificats de la carte CPx utilisée

SSLProtocol et SSLCipherSuite L’effet de SSLProtocol All -SSLv2 avec OpenSSL 1.0.1 est perceptible ici: le log montre une communication TLS v1.2

20 KeepAlive

Force le « Connection: close » dans la réponse Apache même si le client est en HTTP/1.1 avec « Connection: keep-alive »

Idem Sous CentOS, /etc/httpd/conf/httpd.conf contient KeepAlive off par défaut. La littérature est exhaustive sur les Pros/Cons des valeurs de ce paramètre. En tout état de cause, il faut que sa valeur soit positionnée en adéquation avec la conception de l’application.

Ex. : KeepAlive on

21 KeepAliveTimeout A « tuner » selon l’application. Element important pour les performances.

Idem Ex. : KeepAliveTimeout 15

22 Patch ASIP Santé pour Apache/mod_ssl

Nécessaire pour que le serveur puisse vérifier la validité des certificats client présentés par les clients au serveur

N/A Ce patch utilise le chemin et le contenu de SSLCARevocationFile Il ne vérifie la validité que des certificats clients (validité des certificats CPS présenté par les utilisateurs du service).

Tableau 92 : Apache : Directives Apache HTTPD / mod_ssl

Page 102: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

102 / 155

Aucune directive ne doit apparaitre en doublon dans la configuration, en particulier les directives spécifiant les emplacements de magasins de certificats ou de CRLs doivent être uniques (les doublons de directives induisent des doublons de certificats dans les flux SSL, mal supportés par certains clients – VM Java)

Page 103: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

15 Annexe – Serveur Microsoft IIS Il est possible de faire de l’authentification mutuelle par carte CPx en utilisant Microsoft IIS côté serveur. Ce paragraphe est donné pour indication, en comparaison des configurations Linux proposée plus haut.

15.1 Installation Remarque : La console d’administration de Internet Information Server 5 (IIS 5) de Microsoft ne permet de générer que des requêtes de certificats X509 possédant le champ STATE. Ce champ n’existe pas dans les certificats CLASSE-5 délivrés par l’ASIP Santé et ne doit pas être présent, même vide.

15.1.1 Configuration de IIS 5

# Description

1 Ouvrir le Gestionnaire des services Internet (sous Outils administratifs) et naviguez vers le site Web pour lequel vous voulez activer des communications sécurisées (SSL/TLS).

2 Cliquer avec le bouton droit sur le site, puis cliquez sur Propriétés.

3 L'écran des propriétés associé au site Web s’affiche. Cliquer sur l'onglet Sécurité de répertoire.

4 Sous la section Communications sécurisées, cliquer sur Certificat de serveur.

5 L'Assistant Certificat de site Web démarre. Cliquer sur Suivant.

6 Choisir l'option Attribuer un certificat existant, puis cliquer sur Suivant.

7 un écran qui affiche le contenu du magasin de certificats personnel de l’ordinateur apparaît. Mettre en surbrillance le certificat de serveur Web généré précédemment (désigné par le nom commun), puis cliquer sur Suivant.

8 un écran résumé apparaît et affiche tous les détails des certificats en cours d’installation.

9 Cliquer sur Suivant, puis sur OK pour quitter l'Assistant.

Tableau 93 : Microsoft IIS 5 : Configuration

Page 104: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

104 / 155

15.1.2 Configuration de IIS 7

# Description

1 Ouvrir le Gestionnaire des services Internet (sous Outils administratifs) et ouvrir l’assistant IIS7 et ouvrir « Certificats de serveur »

2 Cliquer dans les actions sur « Importer »

3 Importer le certificat SSL du serveur au format PFX (fichier contenant le certificat + la clé privée, le fichier P12 peut être renommer en PFX)

4 Naviguer vers le site Web pour lequel vous voulez activer des communications sécurisées (SSL/TLS) : Cliquer avec le bouton droit sur le site, puis cliquer sur « Modifier les liaisons »

5 Dans la fenêtre, cliquer sur « Ajouter »

6 Dans le champ « Type », choisir « https », puis dans le champ « Certificat SSL », sélectionner le certificat SSL précédemment ajouté. Puis faire « OK » pour valider.

7 Dans l’assistant IIS 7 du site, choisir « Paramètres SSL ».

8 Cocher « Exiger SSL » et « Exiger SSL 128 bits », et dans les « Certificats client », cocher « Accepter ».

9 Cliquer sur « Appliquer » dans les actions.

Tableau 94 : Microsoft IIS 7 : Configuration

Page 105: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

105 / 155

15.1.2.1 Configuration des autorités clientes acceptées

Quelle que soit la version d’IIS utilisée, les autorités clientes acceptées par le serveur doivent être présentes dans le magasin de certificats du compte de l’ordinateur hébergeant IIS.

# Description

1 Sur le serveur hébergeant IIS, ouvrir une console MMC (« MMC.exe »)

2 Ajouter un composant enfichable de type « Certificats »

3 Sélectionner « Compte de l’ordinateur »

4 Ajouter/supprimer/modifier les certificats racines client autorisés, dans : « Autorités de certification racines de confiance » -> « Certificats »

5 Ajouter/supprimer/modifier les certificats intermédiaires client autorisés, dans « Autorités intermédiaires » -> « Certificats »

6 Redémarrer ensuite IIS pour prendre en compte ces nouvelles autorités.

Tableau 95 : Microsoft IIS 7 : Configuration des autorités clientes acceptées

Figure 18 : Microsoft IIS 7 : Configuration des autorités clientes acceptées

Page 106: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

106 / 155

# Description

1 Open IIS Manager and navigate to the server level. For information about opening IIS Manager, see Open IIS Manager (IIS 7). For information about navigating to locations in the UI, see Navigation in IIS Manager (IIS 7).

2 In Features View, double-click Authentication.

3 On the Authentication page, disable any authentication methods that are currently enabled.

4 Select Active Directory Client Certificate Authentication from the list and then click Enable in the Actions pane.

Tableau 96 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client

Figure 19 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client

Page 107: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

107 / 155

16 Annexe – Résumé des points de configuration importants pour les serveurs BIG-IP de F5

16.1 Gestion des CRLs ASIP Santé sous BIG-IP

Gestion des CRLs ASIP Santé sous BIG-IP

Les versions 12 de F5 embarquent nativement un patch permettant de gérer les CRLs IGC CPS-2ter qui sont signées avec une clé d'AC différente de celle des certificats de la carte.

Tableau 97 : F5 / Big IP : Pas d’installation de patch nécessaire sous BIG-IP 12.X+

16.2 Activation de TLS 1.2 avec un frontal sous BIG-IP

Contournement pour un frontal BIG-IP

Il est possible d'activer TLS 1.2 sur un frontal BIG-IP faisant de l'authentification mutuelle CPS sous Windows et sous Mac OS X, en fixant la valeur du paramètre "SSL Sign Hash" du "SSL Client Profile" à "SHA1" (https://support.f5.com/kb/en-us/solutions/public/14000/700/sol14783.html (Overview of the Client SSL profile (11.x - 12.x))).

Tableau 98 : F5: TLS 1.2: Contournement pour un frontal BIG-IP de F5

Contournement pour un frontal BIG-IP de F5

Pour passer à un "SSL Client Profile" à "SHA256", il faut s'assurer de l'installation de la Cryptolib CPS v5.0.29+ coté client.

Tableau 99 : F5: TLS 1.2: Contournement pour un frontal BIG-IP de F5: TLS 1.2 et SHA256 en échange de clé

16.3 Correction du problème "unused bit" sous BIG-IP de F5

Les références chez F5 sur ce sujet sont:

Correction du problème "unused bit" sous BIG-IP

La Correction du problème "unused bit" sous F5 consiste à passer sur une version 12.X de BIG-IP:

https://support.f5.com/kb/en-us/solutions/public/16000/100/sol16136.html

https://support.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-ltm-12-1-0.html

Tableau 100 : F5: Correction du problème "unused bit" sous BIG-IP

Page 108: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

108 / 155

16.4 Gestion des chaines de certificats signées SHA2 sous BIG-IP de F5 [IGC-Santé]

Support de SHA2 par F5 pour les chaines IGC-Santé

Pour gérer l’IGC-Santé, la version BIG-IP doit être 11.4+ (gestion de SHA2).

Tableau 101 : F5: Support de SHA2 par F5 pour les chaines IGC-Santé

16.5 Offload SSL avec un serveur BIG-IP de F5 Lorsqu'un F5 est utilisé en frontal d'un serveur d'application:

La connexion SSL client-application est en fait assurée par le frontal F5

Le lien {F5-Serveur d'application} peut avoir lieu en HTTP (sécurité assurée par l'infrastructure).

Le certificat SSL présenté par le client est ré-écrit par le F5 dans le header HTTP au moyen d’une iRule : https://devcentral.f5.com/questions/irule-to-pass-client-ssl-cert-to-the-application-server-pool-member

HTTP::header insert "SSL_CLIENT_CERT" [URI::encode [b64encode [SSL::cert 0]]]

Tableau 102 : F5: Ecriture du certificat client dans le header HTTP

(ce qui se fait aussi avec {Apache-Serveur d'application} au moyen de mod_proxy et mod_rewrite, configuration conseillée pour "POCer" avant d’intégrer avec f5)

Coté Serveur d'application, la récupération du certificat se fait avec getHeader("SSL_CLIENT_CERT") et la construction de l’objet X509Certificate:

// exemple en Java 8

// avec les API Java classiques

// (http://stackoverflow.com/questions/3389143/generate-x509certificate-from-byte):

String pemText = httpServletRequest.getHeader("SSL_CLIENT_CERT");

byte[] derBytes = Base64.getDecoder().decode(

pemText.replaceAll("-----(BEGIN|END) RSA PUBLIC KEY-----", "").replaceAll("\n", "")

);

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");

InputStream in = new ByteArrayInputStream(derBytes);

X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in);

// […] récupération de l'Id_NAT_PS

// suite des traitements

Tableau 103 : F5: Récupération du certificat client depuis le header HTTP dans l'application

Page 109: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

109 / 155

17 Annexe – Obtention de cartes CPx de test Il est recommandé de se procurer un jeu de carte de tests CPx afin - a minima - de pouvoir tester la connexion au service par carte CPx.

Le bon de commande de cartes CPS est disponible à l'adresse: http://esante.gouv.fr/files/documents/414.pdf

Il est nécessaire de remplir ce bon avec les bons contacts, la bonne adresse de livraison et en spécifiant l'usage envisagé afin que les équipes support CPS, projets et techniques puissent accompagner la demande au mieux.

18 Annexe – Obtention de certificats SSL Serveurs Les serveurs peuvent être équipés d’un certificat SSL émanant:

1. Soit d’un certificat serveur du commerce (Verisign, Thawte, GoDaddy…) 2. Soit d’un certificat « IGC-Santé SSL_SERV » ASIP Santé 3. Soit d’un certificat serveur émis par une PKI interne

18.1 Certificats du « Commerce » ou issus d’une PKI interne Il est techniquement faisable d’authentifier des porteurs de cartes CPx tout en ayant des certificats du commerce (Verisign, Thawte, GoDaddy…) ou issus d’une PKI interne côté serveur

conseil faire comme ça dans un premier temps

18.3 Certificats Serveur ASIP Santé: "IGC-Santé SSL_SERV" Il est possible d’authentifier des porteurs de cartes CPx tout en ayant des certificats des certificats "IGC-Santé SSL_SERV" ASIP Santé côté serveur.

Dans ce cas, bien que les chaines des certifications se confondent parfois, il est nécessaire de continuer de bien suivre la configuration mod_ssl standard présentée plus haut.

18.3.1 "Certificats serveur" de test

Les générations de certificats "IGC-Santé SSL_SERV" de tests et leurs utilisations en test ne posent pas de souci particulier : elles peuvent être faites avec les cartes de test via

la PFCNG pour l'IGC-Santé ( https://pfc.eservices.esante.gouv.fr/ )

La fiche de demande de certificats serveur de tests est disponible à l'adresse: http://esante.gouv.fr/files/documents/414.pdf.

Il est nécessaire de la remplir avec des noms de domaine rattachables à la personne morale ou physique qui soumet la demande d'habilitation.

18.3.2 "Certificats serveur" de production

Par contre, pour la production, la génération d’un certificat "IGC-Santé SSL_SERV" à destination de serveurs est possible :

en utilisant les cartes de porteurs CPx de production de type CPE, CDE, CDA, CPA o http://esante.gouv.fr/services/espace-cps/les-cartes-de-la-famille-cps

Page 110: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

110 / 155

o les porteurs devant avoir été préalablement habilité pour les domaines que l’on souhaite exploiter

via o la PFC pour l'IGC-Santé ( https://pfc.eservices.esante.gouv.fr/ )

Si le demandeur n’est pas une structure de santé mais qu’il est hébergeur de données de santé, il peut demander une CPA qui permet d’obtenir ensuite des certificats serveurs (formulaire de demande à remplir en précisant le numéro d’agrément hébergeur de données de santé)

La politique de certification des « SSL_SERV » se trouve à cette adresse:

http://igc-sante.esante.gouv.fr/PC/#ca

conseil Commander des certificats ASIP Santé dans un second temps, après avoir éprouvé la configuration du serveur avec des chaines de certificats et des procédures d’obtention de certificats SSL « classiques »

Page 111: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

111 / 155

18.3.3 La PFCNG: plate-forme de retrait en ligne des certificats logiciels IGC-Santé

Les certificats serveur SSL ASIP Santé "IGC-Santé SSL_SERV" s’obtiennent à l’aide de l’outil en ligne "PFCNG", mis à disposition librement et gratuitement par l’ASIP santé : https://pfc.eservices.esante.gouv.fr/

Cet outil requiert un navigateur web et fonctionne sous Linux, Mac OS X et Windows. La PFCNG est un outil graphique qui permet d’obtenir de manière simple un certificat serveur SSL ASIP Santé "IGC-Santé SSL_SERV" en automatisant les différentes phases :

génération des clés

création de la demande de certificat

envoi à la plateforme d’inscription

retrait

Page 112: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

112 / 155

18.4 Configuration des postes clients se connectant vers un serveur présentant un certificat "Certificats serveur" ASIP Santé

L'autorité de certification ASIP Santé n’est pas certifiée par une des autorités de confiance qui sont habituellement "trusted" les navigateurs. Les IGC de santé sont « autonomes » : elles apportent leurs propres hiérarchies de certificats racines et de certificats intermédiaires.

Il faut donc que le client accepte au moins une fois de faire confiance à la chaine de certificats Classe 4 ou IGC-Santé ELEMENTAIRE de l’ASIP Santé ou que le client installe la chaine de certificats Classe 4 ou IGC-Santé ELEMENTAIRE dans son navigateur pour faire confiance au serveur présentant un certificat "CSA - Classe 4" ou "SSL_SERV" ASIP Santé.

Cette opération peut être implémentée spécifiquement via des installeurs des seules chaines de certificats ASIP Santé concernées pour tous les navigateurs / OS visé (xpi, msi, dmg, rpm…).

Une autre solution consiste à utiliser les fournitures ASIP Santé.

Les fournitures ASIP Santé qui installent les chaines de certificats ASIP Santé sont :

1. La Cryptolib CPS v5:

La Cryptolib CPS v5 apporte dans ce cas sans doute « trop de choses » sur les postes clients

o CCM, outils de lecture de carte CPS… o qui ne sont pas indispensables aux services qui ne feraient pas appel à la carte

CPS sur le poste client o qui vont introduire de la confusion en sous-entendant la nécessité de porter une

CPS pour accéder à un site qui ne ferait pas appel à la carte CPS sur le poste client

2. Le XPI disponible sur http://testssl.asipsante.fr/ o Mais pour Firefox seulement

Il est donc très important de noter que :

1. les certificats serveurs ASIP Santé sont plutôt liés, en l’état actuel de leur politique de certification associée, aux acteurs « santé social »

a. systèmes d’information d’établissements b. postes clients de Professionnels de Santé c. échanges entre serveurs de santé

2. l’ASIP Santé contourne actuellement ce type de problème pour ses propres services en déployant des certificats « du commerce » (https://www.mssante.fr/ par exemple).

3. l’identification des cas d’usage (postes client trustant déjà une IGC de santé? postes client nécessitant ou non la carte CPS…) est une phase d’analyse projet préalable nécessaire avant d’intégrer des certificats Classe 4 dans une application

Remarques Les chaines de l’IGC de Test ne sont installées par aucun des produits ASIP Santé.

Page 113: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

113 / 155

19 Annexe – Conception d’un site Web utilisant l’authentification CPx: les grandes lignes

L’ergonomie d’un site Web gérant les accès et l’authentification des clients via une authentification mutuelle à base de certificat client est un point délicat, les messages et pages affichés à l’utilisateur en cas d’erreur (certificat client expiré ou révoqué, certificat client non présent dans les magasins du poste client…) n’étant pas toujours compréhensibles de l’utilisateur.

Il est toutefois possible d’obtenir des résultats intéressants en conservant une architecture serveur simple.

Pour se faire, il est nécessaire de balayer l’ensemble du paramétrage {client, serveur, page Web, JavaScript, CSS} mis en œuvre par l’application.

Les solutions illustrées ci-après reposent sur 4 axes :

Côté serveur a. maitrise de la configuration du serveur

i. quel que soit le frontal Web utilisé (Apache, IIS…) ii. avec notamment une isolation des ressources par condition d’accès

1. les pages en libre accès sont isolées dans un contexte en libre accès 2. les pages de « service », protégées sous authentification mutuelle,

sont isolées dans un contexte séparé de tout autre contexte 3. les ressources requérant des conditions d’accès différentes sont

isolées dans des contextes cloisonnés b. maitrise de la configuration la qualité des réponses/des pages renvoyées au client

par le serveur c. maitrise de l’ergonomie de navigation dans les pages

Côté client d. Maitrise des pages Web avec notamment des insertions judicieuses de code

JavaScript dans les pages i. effacements des caches d’authentification

ii. appuis ergonomiques 1. activation / désactivation de fonctionnalités de l’interface Web

Page 114: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

114 / 155

19.1 Expression du besoin L’implémentation d’une authentification mutuelle par carte CPx doit être identifiée comme un sous-projet à part entière au sein du projet logiciel auquel on souhaite ajouter cette fonctionnalité.

Il est en particulier nécessaire d’exprimer clairement le besoin projet sur les aspects « connexion par carte » sous la forme d’un tableau pouvant prendre la forme suivante:

Aspect de mise en œuvre dans l’application

Détails Besoin exprimé par le projet (ex. « oui », « non », « prioritaire »…)

Exigence de sécurité requise sur l’authentification

Faible / Forte / Très forte (indicatif)

Exigence requise pour l’ergonomie de l’application

Faible / Forte / Très forte (indicatif)

Log in (connexion de l’utilisateur à l’application)

Authentification du client par certificat logiciel seulement

Plusieurs méthodes de login disponibles en parallèle (ex : CPx ou OTP)

Insertion tardive de la carte CPx

Configuration de l’utilitaire CCM recommandée

Mode de détection automatique du CCM (voir manuel de la Cryptolib CPS) : activé (attention au comportement avec les lecteurs PSS) ou désactivé

Protocole de transport Généralement HTTPS peut être : HTTPS/IMAPS/SMTPS…

Offload SSL (gestion TLS par un composant dédié)

Architecture supportant l’établissement du canal SSL via un composant dédié

Personnalisation des pages d’erreur

Personnalisation des pages d’erreurs HTTP uniquement Personnalisation de tous les cas d’erreurs (y compris erreurs « côté client »)

Gestion applicative des événements sur le poste de travail

Evénements Lecteur (branchement, débranchement)

Evénements Carte (insertion, arrachage)

Evénements magasin (montée/descente des certificats dans le magasin utilisé notamment par les navigateurs Web)

Page 115: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

115 / 155

Aspect de mise en œuvre dans l’application

Détails Besoin exprimé par le projet (ex. « oui », « non », « prioritaire »…)

Vérification de la disponibilité de la clef privée de la carte

3

Le standard SSL ne préconisent rien sur la présence de la {clef privée ; carte} ayant permis de négocier le lien sécurisé

Configuration du poste de travail Ensemble des actions à effectuer sur le poste de travail pour le rendre opérationnel

Architecture serveur

Simple (type LAMP) Complexe (reverse proxy, serveur d’application) Très complexe (load-balancer, cluster…)

Authentification

Authent. serveur

Authent. client

Authent. Mutuelle

Log off (déconnexion)

Never (pas de log-off)

On-demand (déconnexion à la demande de l’utilisateur)

Timeout (déconnexion sur détection d’inactivité)

Arrachage carte CPx (déconnexion sur arrachage carte)

Tableau 104 : Authentification mutuelle par carte CPx : Expression du besoin

3 Voir [1] pour de plus amples explications. Analogie possible avec les scénarios de contrôle d’accès aux

bâtiments : badgage ou {badgage + port du badge}

Page 116: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

116 / 155

19.2 Diagnostic technique sur la base de l’expression de besoin L’implémentation d’une authentification mutuelle par carte CPS doit être identifiée comme un sous-projet à part entière au sein du projet logiciel auquel on souhaite ajouter cette fonctionnalité.

Il est en particulier nécessaire d’exprimer clairement le besoin sous la forme d’un tableau pouvant prendre la forme suivante, en remplissant la colonne « besoin » et en comparant le résultat obtenu aux 2 autres colonnes du tableau « Authentification et login CPx navigateur, sans add-on » et « Autre type d’application utilisant l’authentification CPx (client lourd connecté ou navigateur avec add-on)

».

Ces 2 colonnes rappellent les 2 architectures possibles pour l’authentification par carte CPx avec un client « léger » :

1. Un client léger sans add-on (pas de composant ActiveX, pas de plugin NAPI, pas d’applet Java)

2. Un client « intelligent » a. Un client léger avec add-on4 (composant ActiveX, ou plugin NAPI, ou applet Java) b. Une application lourde connectée capable d’effectuer un rendu HTML

Ces 2 architectures ne présentant pas les mêmes contraintes et ne répondant pas aux mêmes besoins.

Aspect de mise en œuvre dans l’application

Détails Besoin (à remplir)

Authentification et login CPx navigateur, sans add-on

Autre type d’application utilisant l’authentification CPx (client lourd connecté ou navigateur avec add-on)

Exigence de sécurité requise sur l’authentification

Forte Très forte

Exigence requise pour l’ergonomie de l’application

Bonne Très bonne

Log in (connexion de l’utilisateur à l’application)

Méthode Authentification du client par certificat logiciel

Authentification du client par certificat logiciel

Plusieurs méthodes de login disponibles en parallèle (ex : CPx ou OTP)

Oui Oui

Insertion tardive de la carte CPx

Oui Oui

Configuration de l’utilitaire CCM recommandée

Mode de détection Mode automatique activé

Indépendant de l’état de recherche du CCM

4 Ce type d'architecture n'a plus le vent en poupe: fin de support des applets Java par les navigateurs et par

Oracle, version initiale de Microsoft Edge sans support des extensions, fin du support des extensions NPAPI en C++ par Mozilla Firefox…

Page 117: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

117 / 155

Aspect de mise en œuvre dans l’application

Détails Besoin (à remplir)

Authentification et login CPx navigateur, sans add-on

Autre type d’application utilisant l’authentification CPx (client lourd connecté ou navigateur avec add-on)

Protocole de transport TLS (HTTPS) TLS (HTTPS)

Offload SSL (gestion TLS par un composant dédié)

Architecture supportant l’établissement du canal SSL via un composant dédié

Oui Oui

Personnalisation des pages d’erreur

Oui (erreurs HTTP uniquement)

Oui pour tous les cas d’erreurs

Gestion applicative des événements sur le poste de travail

Evénements Lecteur (branchement, débranchement)

Non Temps réel

Evénements Carte (insertion, arrachage)

Non Temps réel

Evénements magasin (montée/descente des certificats dans le magasin utilisé notamment par les navigateurs Web)

Non Temps réel

Vérification de la disponibilité de la clef privée de la carte

5

Les standards ne préconisent rien sur la présence de la {clef privée ; carte} ayant permis de négocier le lien sécurisé

Non Oui

Configuration du poste de travail

Ensemble des actions à effectuer sur le poste de travail pour le rendre opérationnel

Complexe (GALSS + Cryptolib CPS)

Plus complexe car composant spécifique

Architecture serveur

Plus complexe car composant spécifique

Authentification Authent. client

Forte (sans gestion de tous les évènements)

Forte (gestion possible de tous les évènements)

Authent. serveur Oui (TLS) Oui, paramétrable

5 Voir [1] pour de plus amples explications. Analogie possible avec les scénarios de contrôle d’accès aux

bâtiments : badgage ou {badgage + port du badge}

Page 118: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

118 / 155

Aspect de mise en œuvre dans l’application

Détails Besoin (à remplir)

Authentification et login CPx navigateur, sans add-on

Autre type d’application utilisant l’authentification CPx (client lourd connecté ou navigateur avec add-on)

Authent. Mutuelle Oui (TLS) Possible (End to end), dépend des composants

Log off (déconnexion)

Never Oui Oui

On-demand Oui Oui

Timeout Oui Oui

Arrachage carte CPx

Gestion difficile, dépend du navigateur

Oui

Tableau 105 : Authentification mutuelle par carte CPx : Expression du besoin

Le type d’architecture « poste client » que l’on déduit de l’expression de besoin doit être compatible avec les contraintes exprimées initialement par le projet.

La suite de cette annexe adresse les projets compatibles avec l’architecture «Authentification et login CPx navigateur (sans add-on) » qui visent généralement à déployer un service ne nécessitant pas d’add-on sur les postes client autres que les middlewares CPx (Cryptolib CPS).

L’expression de besoins ne peut pas être complètement couverte si l’architecture retenue n’est pas compatible avec les contraintes imposées par le projet.

Page 119: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

119 / 155

19.3 Exemple d’application Web exploitant la CPx sous Microsoft Windows

19.3.1 Microsoft Internet Explorer

19.3.1.1 Présentation de la maquette finale

Le PoC « authentification web par carte CPx » se traduit par le développement d’un site web simple représentatif des configurations en production.

Le site https://www.mssante.fr/ implémente le principe présenté dans ce qui suit en production (dans sa partie accès par carte).

Dans un premier temps, Internet Explorer est fermé et la carte est insérée dans le lecteur : la carte est dite « préalablement présente dans le lecteur » (préalablement au lancement du navigateur).

Le CCM (voir manuel d’installation et d’utilisation de la Cryptolib CPS v5) est au vert (mode automatique ou rafraichissement manuel du magasin par l’utilisateur, ce dernier mode étant le mode de configuration du CCM par défaut).

Internet Explorer est lancé sur l’adresse de la page d’accueil du service :

Figure 20 : Windows : IE : Connexion sur la page d’accueil

Page 120: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

120 / 155

Le fait de cliquer sur « Suivant » en bas à droite (bouton en bleu foncé, actif) fait apparaître la page suivante:

Figure 21 : Windows : IE : Insertion carte

La page doit contenir des éléments rappelant les contrôles visuels que l’utilisateur peut effectuer pour s’assurer que sa carte est bien insérée et bien reconnue par le système. En particulier, cette page est l’occasion de rappeler que le magasin doit être rafraichit manuellement par l’utilisateur (mode d’installation par défaut du CCM). Ici, les éléments de design sont sommaires, ce rôle est joué par l’icône « carte à puce » / Gestionnaire de certificat / vert.

Page 121: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

121 / 155

Le bouton « Suivant » est actif, en cliquant dessus on obtient la fenêtre de sélection der certificat suivante:

Figure 22 : Windows : IE : Sélection certificat

Le bouton « suivant » est désactivé tant le certificat n’est pas sélectionné.

Page 122: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

122 / 155

En cliquant sur « OK » :

Figure 23 : Windows : IE : Saisie code porteur

Le bouton « Suivant » est désactivé tant le code porteur n’est pas saisi.

Page 123: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

123 / 155

Figure 24 : Windows : IE : Page de service

Le bouton « Suivant » disparait. Il laisse la place à un bouton « Déconnexion » présent dans la même « zone d’actions » que

les boutons « Suivant » visibles précédemment.

Page 124: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

124 / 155

A partir de là, si on clique sur « déconnexion » sans arracher la carte, on retourne sur la page d’accueil :

Figure 25 : Windows : IE : Déconnexion sans arrachage carte : retour à la page d’accueil

Page 125: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

125 / 155

Si on reste dans cette même instance du navigateur et qu’on cherche à se reconnecter au service, la sélection du certificat est redemandée, le code porteur n’est pas redemandé (même processus) :

Figure 26 : Windows : IE : Déconnexion sans arrachage carte : re-sélection du certificat, pas de code porteur

Page 126: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

126 / 155

On re-rentre dans le service :

Figure 27 : Windows : IE : Déconnexion sans arrachage carte : reconnexion au service

Page 127: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

127 / 155

A partir de là, si on arrache la carte depuis la page de service et que l’on navigue dans le contexte du service (appui sur la touche « F5 »), on obtient :

Figure 28 : Windows : IE : Pas de déconnexion + Arrachage carte + F5 sur la page de service

La page n’est pas belle mais elle intervient avec une connexion au service OK et

instantanément Si on réinsère la carte et qu’on retour à la page d’accueil dans le même navigateur :

sélection Certificat OK

code porteur OK

service OK Si on se déconnecte puis que l’on arrache la carte puis que l’on tente des reconnexions au service sans carte : le site passe de « Insertion carte » à « Authentification » et revient « Insertion carte » tant que l’on n’insère pas de carte.

Page 128: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

128 / 155

Si on insère une carte: il faut attendre que le bouton « suivant » passe à l’état « actif »

Figure 29 : Windows : IE : Attente de chargement de certificat

Le bouton « suivant » restant inactif pendant la durée de chargement du certificat en magasin :

Figure 30 : Windows : IE : Bouton inactif pendant l’attente de chargement du certificat

puis:

sélection Certificat : OK

saisie du code porteur : OK

service : OK Sur une fermeture de Internet Explorer :

connexion directe au service KO, ce qui est OK

connexion via le wizard OK, ce qui est OK En continuant de simuler le parcours d’un utilisateur :

Fermeture Internet Explorer

Lancement Internet Explorer

Connexion sur la page d’accueil

Insertion carte tardive

OK moyennant d’attendre :

la fin des accès carte

l’apparition de la boite de dialogue

l’activation de Suivant

Page 129: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

129 / 155

19.3.1.2 Résumé

En résumé :

Action / Situation Résultat obtenu

Insertion carte préalable Demande de sélection de certificat OK Demande insertion code porteur OK Connexion au service protégé OK

Déconnexion sans arrachage carte Sélection carte redemandée mais code porteur pas redemandé

Arrachage carte après connexion au service Page d’erreur SSL locale si poursuite de la navigation dans la partie protégée

Tentatives de reconnexions au service sans carte

Le site passe de « Insertion carte » à « Authentification » et revient « Insertion carte » tant qu’on n’insère pas de carte. On se retrouve dans le scénario insertion tardive.

Insertion carte tardive

Attente chargement du certificat en magasin nécessaire Demande de sélection de certificat OK Demande insertion code porteur OK Connexion au service protégé OK

Tableau 106 : Windows 7 / Internet Explorer : Résultats

Remarque PoC

Tous les scénarios « carte » (insertion tardive, retrait…) doivent être évalués en PoC afin a minima de se faire une idée du reste à faire entre :

les développements du PoC

les développements finaux.

Tableau 107 : Remarque PoC

Page 130: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

130 / 155

19.3.2 Mozilla Firefox

Le PoC doit porter sur tous les types de navigateurs visés par l’application finale.

19.3.2.1 Configuration

# Solution

0002 La même configuration serveur Apache et des pages HTML que pour IE est utilisée.

Tableau 108 : Windows 7 / Mozilla Firefox : Configuration

19.3.2.2 Résumé

En résumé :

Action / Situation Résultat obtenu

Insertion carte préalable idem IE

Déconnexion sans arrachage carte mieux que IE : sélection carte redemandée et code porteur redemandé

Arrachage carte après connexion au service mieux que IE : détection de l’évènement arrachage carte OK : redirection vers la page d’accueil automatique sur l’évènement de retrait de la carte

Tentatives de reconnexions au service sans carte

le site passe de « Insertion carte » à « Authentification » et revient « Insertion carte » tant qu’on n’insère pas de carte. On se retrouve dans le scénario insertion tardive :

Insertion carte tardive Mieux que IE : détection de l’évènement insertion carte OK (pas besoin d’appuyer sur « suivant »).

Tableau 109 : Windows 7 / Mozilla Firefox : Résultats

Page 131: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

131 / 155

19.3.3 Google Chrome

19.3.3.1 Configuration

# Solution

0002 La même configuration serveur Apache et des pages HTML que pour IE et Firefox est utilisée.

Tableau 110 : Windows 7 / Google Chrome: Configuration

19.3.3.2 Résumé

En résumé :

Action / Situation Résultat obtenu

Insertion carte préalable idem IE

Déconnexion sans arrachage carte moins bien que IE : pas de sélection certificat redemandée et pas de code porteur redemandé

Arrachage carte après connexion au service page d’erreur SSL locale

Insertion tardive

OK sauf si une tentative de connexion a été faite préalablement sans carte avec l’instance de Chrome courante

Tableau 111 : Windows 7 / Google Chrome : Résultats

Les résultats sont moins bons que ce qu’on obtient avec Internet Explorer et Mozilla Firefox du fait en premier lieu d’un usage intensif du cache SSL.

Les développements finaux doivent intégrer des « workarounds » spécifiques à Chrome coté serveur faute de quoi la solution devra intégrer des messages spécifiques à Chrome. Dans ce dernier cas,

La solution est essentiellement ergonomique o Messages signifiant à l’utilisateur qu’il est sous Chrome et qu’il faut relancer Chrome si les

erreurs de connexion persistent o utilisation de jQuery-migrate ou de Modernizr par exemple

La solution peut intégrer des messages spécifiques signifiant à l’utilisateur de fermer son navigateur pour rendre effective la déconnexion

Tableau 112 : Windows 7 / Google Chrome : Remarques

Page 132: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

132 / 155

19.4 Exemple d’application Web exploitant la CPx sous Apple Mac OS X

Le PoC doit porter sur tous les types d’OS visés par l’application finale.

19.4.1 Apple Safari

Safari requiert l’activation des SSLOptions suivantes:

SSLOptions +OptRenegotiate Ce point est à évaluer aux vues des PSSI implacables au projet.

Tableau 113 : Mac OS X / Safari : Remarques

19.4.2 Mozilla Firefox

19.4.2.1 Présentation du résultat obtenu

Figure 31 : Mac OS X : Mozilla Firefox : Version utilisée

Page 133: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

133 / 155

Figure 32 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil

Figure 33 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil

Page 134: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

134 / 155

Figure 34 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil

Figure 35 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil

Figure 36 : Mac OS X : Mozilla Firefox : Connexion sur la page protégée de service

Page 135: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

135 / 155

19.4.2.2 Résumé

En résumé, le comportement obtenu pour Mozilla Firefox sous Mac OS X est équivalent à celui de Mozilla Firefox sous Microsoft Windows:

Action / Situation Résultat obtenu

Insertion carte préalable Demande de sélection de certificat OK Demande insertion code porteur OK Connexion au service protégé OK

Déconnexion sans arrachage carte sélection carte redemandée et code porteur redemandé

Arrachage carte après connexion au service détection de l’évènement arrachage carte OK : redirection vers la page d’accueil automatique sur l’évènement de retrait de la carte

Tentatives de reconnexions au service sans carte

Le site passe de « Insertion carte » à « Authentification » et revient « Insertion carte » tant qu’on n’insère pas de carte. On se retrouve dans le scénario insertion tardive.

Insertion carte tardive détection de l’évènement insertion carte OK (pas besoin d’appuyer sur « suivant »).

Tableau 114 : Mac OS X / Mozilla Firefox : Résultats

Page 136: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

136 / 155

19.4.3 Google Chrome

19.4.3.1 Présentation du résultat obtenu

La carte CPx est préalablement insérée ou insérée tardivement (voir limitation en résumé).

Figure 37 : Mac OS X : Google Chrome : Version utilisée

Figure 38 : Mac OS X : Google Chrome : Connexion à la page d’accueil

Page 137: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

137 / 155

Figure 39 : Mac OS X: Google Chrome : Insertion carte

Figure 40 : Mac OS X : Google Chrome : Sélection du certificat

Figure 41 : Mac OS X : Google Chrome : Saisie du code porteur

Page 138: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

138 / 155

19.4.3.2 Résumé

En résumé, le comportement obtenu pour Google Chrome sous Mac OS X est équivalent à celui de Google Chrome sous Microsoft Windows:

Action / Situation Résultat obtenu

Insertion carte préalable Demande de sélection de certificat OK Demande insertion code porteur OK Connexion au service protégé OK

Déconnexion sans arrachage carte pas de sélection certificat redemandée et pas de code porteur redemandé

Arrachage carte après connexion au service page d’erreur SSL locale

Insertion tardive

OK sauf si une tentative de connexion a été faite préalablement sans carte avec l’instance de Chrome courante

Tableau 115 : Mac OS X / Google Chrome: Résultats

Mêmes remarques que sous Windows :

Les résultats sont moins bons que ce qu’on obtient avec Microsoft Internet Explorer et Mozilla Firefox du fait en premier lieu d’un usage intensif du cache SSL.

Les développements finaux doivent intégrer des « workarounds » spécifiques à Chrome coté serveur faute de quoi la solution devra intégrer des messages spécifiques à Chrome. Dans ce dernier cas,

La solution est essentiellement ergonomique o Messages signifiant à l’utilisateur qu’il est sous Chrome et qu’il faut relancer Chrome si les

erreurs de connexion persistent o utilisation de jQuery-migrate ou de Modernizr par exemple

La solution peut intégrer des messages spécifiques signifiant à l’utilisateur de fermer son navigateur pour rendre effective la déconnexion

Tableau 116 : Mac OS X / Google Chrome: Remarques

Page 139: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

139 / 155

19.5 Configurations testées 3 configurations ont été testées. Elles sont décrites ci-après. La première est celle qui est documentée dans cette note.

La séparation des contextes suivants les exigences de sécurité permet de passer relativement aisément d’une configuration à l’autre.

19.5.1 Configuration Apache 1

Elle se résume à :

1 Virtualhost https

Des Location : o SSLVerifyClient none pour la page d’accueil et la demande d’insertion carte o SSLVerifyClient optional pour la sélection du certificat o SSLVerifyClient require pour les pages de services

Page 140: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

140 / 155

LoadModule ssl_module modules/mod_ssl.so

Listen 443

SSLPassPhraseDialog builtin

SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)

SSLSessionCacheTimeout 300

SSLMutex default

SSLRandomSeed startup file:/dev/urandom 256

SSLRandomSeed connect builtin

<VirtualHost _default_:443>

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSLCertificateFile /path_to/server.cert.pem

SSLCertificateKeyFile /path_to/.server.pk.pem

SSLCertificateChainFile /path_to/server.chain.pem

SSLCACertificateFile /path_to/client.rootca.pem

SSLCARevocationFile /path_to/crl.pem

<Files ~ "\.(cgi|shtml|phtml|php3?)$">

SSLOptions +StdEnvVars

</Files>

<Directory "/var/www/cgi-bin">

SSLOptions +StdEnvVars

</Directory>

ErrorLog logs/ssl_error_log

TransferLog logs/ssl_access_log

CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

LogLevel warn

DocumentRoot /path_to/public_html/

<directory /path_to/public_html>

Order Allow,Deny

Allow from all

AllowOverride All

</directory>

DirectoryIndex index.htm index.html

<Location /component00>

#ASIP: page d’accueil

</Location>

<Location /component01>

#ASIP: demande insertion carte

</Location>

<Location /component02>

#ASIP: graceful login

SSLVerifyClient optional

SSLVerifyDepth 4

RewriteEngine On

RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS

RewriteRule .* /component01/index.htm [R,L]

RewriteCond %{SSL:SSL_CLIENT_VERIFY} ^SUCCESS

RewriteRule .* /component03/ [R,L]

</Location>

<Location /component03>

#ASIP: pages de service protégées

SSLVerifyClient require

SSLVerifyDepth 4

RewriteEngine On

RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS

RewriteRule .* /component01/index.htm [R,L]

</Location>

</VirtualHost>

Tableau 117 : Apache : Configuration Apache 1

Page 141: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

141 / 155

19.5.2 Configuration Apache 2

Elle se résume à :

4 Virtualhost https o 1 Virtualhost SSLVerifyClient none pour la page d’accueil et la demande d’insertion carte o 1 Virtualhost SSLVerifyClient optional pour la sélection du certificat o 1 Virtualhost SSLVerifyClient require pour les pages de services

Pas de Location

Dans ces conditions, les demandes de sélection de certificats et de saisie de PIN sont doublées sous Firefox, IE et Chrome. Cela provient de l’ouverture d’une connexion TCP dans le SSLVerifyClient optional et d’une autre dans le SSLVerifyClient require.

Cette configuration n’est pas retenue.

19.5.3 Configuration Apache 3

Elle consiste à « mixer » les configurations Apache 1 et Apache 2 :

2 Virtualhost https o 1 Virtualhost SSLVerifyClient none pour la page d’accueil et la demande d’insertion carte o 1 Virtualhost avec 2 Location

1 Location SSLVerifyClient optional pour la sélection du certificat 1 Location SSLVerifyClient require pour les pages de services

On retrouve les résultats de la configuration Apache 1 sauf pour Safari sauf Windows :

Safari sous Windows utilise le CSP Microsoft. Dans cette configuration, l’introduction tardive de la carte ne fonctionne du tout : Safari ouvre le magasin de certificat une seule fois. Si la carte a été préalablement insérée, les 2 certificats d’authentification et de signature sont montrés. Si on sélectionne le certificat de signature, la connexion échoue directement. Si on sélectionne le certificat d’authentification, la connexion s’ouvre si elle correspond à un autre Virtualhost.

Cette configuration n’est pas retenue mais elle tend à montrer qu’une gestion spécifique doit être mise en place pour Safari.

Au passage:

1. Safari n’a pas l’air de bien supporter les certificats SSL avec les DNS dans le SAN. 2. L’utilisation de Safari sous Windows est une piste intéressante pour pallier au manque de

d’environnement de développement sous Mac OS X (pas même couche d’accès à la carte mais moteur de rendu et logique de gestion des connexions TCP identiques).

Page 142: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

142 / 155

19.5.4 Détails techniques de l’exemple (configuration Apache 1)

Pour mettre en œuvre la solution présentée plus haut en « configuration Apache 1 », l’attention s’est portée sur les éléments techniques particulier suivants :

Acteur Composant Point d’attention

Serveur

Apache

Configuration adéquate des VirtualHost et des Location

L’application est matérialisée par un nom de domaine, ici: https://server1.cosign.eu/ Les ressources sont isolées au sein de Location dédiées en fonction de leurs conditions d’accès. Dans notre cas :

1 Virtualhost https

Des Location : o https public pour la page

d’accueil et la demande d’insertion carte

o https optionnel pour la sélection du certificat

o https requis pour les pages de services

Configuration du cache des pages

Cacher les ressources statiques (.js, .css, .jpg…) Bien maitriser le cache sur les réponses HTML (cache pour de l’HTML statique, pas de cache pour les pages dynamiques et les pages de logins) Utiliser Cache control: public pour activer le cache caching HTTPS sous Firefox. Etablir la liste des « best practices » retenues et la partager au travers du document de conception.

mod_ssl Utilisation de « SSLVerifyClient optional »

Accueil Pas d’authent client

Insertion carte Pas d’authent client

Authentification SSLVerifyClient

optional

Service SSLVerifyClient

require

Logout Pas d’authent client

Page 143: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

143 / 155

Acteur Composant Point d’attention

Utilisation (conditionnelle) de mod_rewrite : « RewriteCond %{SSL:SSL_CLIENT_VERIFY}

^SUCCESS » Sur la Location correspondant à l’authentification Une référence utile. LA référence pour ce sujet précis : Requiring SSL client authentication in a user friendly way in Apache

RewriteEngine On

# l’authentification client n’a pas

lieu: on renvoit vers la page de

demande d’insertion carte

RewriteCond %{SSL:SSL_CLIENT_VERIFY}

!^SUCCESS

RewriteRule .* /[insertion carte]/index.htm [R,L]

# l’authentification client a eu lieu

avec succès: on bascule vers la page

de service

RewriteCond %{SSL:SSL_CLIENT_VERIFY}

^SUCCESS

RewriteRule .* /[Service]/ [R,L]

Client

Page HTML

Etablir la liste des « best practices » et standards retenus pour la conception du frontal pour partage au travers du document de conception.

Ergonomie Parcours guide, CSS, machine à état (parcours)

Cf. snapshots plus haut

Javascript Utilisation d’implémentations spécifiques à chaque navigateur (voir Pro&Cons)

/**

*

* Exemple de fonction js

* qui remet à zero

* le cache d’authentification client

* pour ie et ff.

*

* Ne fonctionne pas sous Chrome.

*

* A tester sous Safari

* et Firefox / Mac OS X.

*

* Code propre à chaque navigateur

* non normalisé.

*

* A insérer dans les contextes

* de logout / login.

*

* Intégration à tester soigneusement.

*

* Veille techno à organiser.

*/

function flushAuthenticationCache()

{

try {

//firefox

if (window.crypto) {

window.crypto.logout();

} else if (document.execCommand) {

//ie

document.execCommand(

"ClearAuthenticationCache",

"false");

}

} catch (e) {

}

}

Tableau 118 : Apache : Documentation de la configuration Apache utilisée

Page 144: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

144 / 155

19.5.5 Reste à faire sur la configuration Apache utilisée (configuration Apache 1)

Acteur Composant Reste à faire par rapport à une application de production existante

Serveur Apache

Performances, accès concurrentiels, montée en charge et sécurité à qualifier

Utilisation de redirections client (flickering, bookmarkage possible de pages intermédiaires) à surveiller

Client

Page HTML

Pages existantes à auditer. Rapide si :

pages peu nombreuses

guideline de best practices clair déjà établi / dossier de conception à jour

Ergonomie

Nécessité de faire des choses spécifiques par type de navigateur

Pages intermédiaires / message à créer

JavaScript

window.crypto.logout(); est spécifique à Firefox. document.execCommand("ClearAuthenticationCache","false"); est spécifique à IE Aucune méthode équivalente n’existe sous Chrome. Ces fonctions n’étant pas normalisées, leur support peut être suspendu sans préavis par les éditeurs. D’où la nécessité de mettre ces aspects dans le mécanisme de veille normalement déjà en place pour supporter les nouvelles versions de navigateurs.

"ClearAuthenticationCache" est impactant sur les performances de IE. A intégrer soigneusement, avec parcimonie, dans les pages / contextes pertinents.

JavaScript de contrôle de l’interface à insérer (activation / désactivation de boutons)

Cryptolib CPS Tests à faire avec la Cryptolib CPS v4

Tableau 119 : Apache : Remarques sur la configuration utilisée

Page 145: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

145 / 155

19.5.6 Configurations utilisées en configuration Apache 1

19.5.6.1 Client

Client

OS Windows 7 SP1 32b

Cryptolib CPS 5.0.8 32b

Lecteur carte Omnikey 3121 PC/SC

Carte CPx CPA 2400140649

Navigateurs Internet Explorer 10 Mozilla Firefox 26.0 Google Chrome 31.0.1650.63 m

CCM Surveillance des lecteurs activée

Tableau 120 : Client : Configurations utilisées

19.5.6.2 Serveurs

Frontal Web

OS CentOS 6.5 64b

Apache 2.2.15

OpenSSL 1.0.1e-fips 11 Feb 2013

Tableau 121 : Serveurs : Configurations utilisées

Page 146: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

146 / 155

20 Annexe – Données des certificats CPS à traiter lors d'une authentification web mutuelle par CPS

20.1 Informations récupérables via les variables d'environnement Apache/mod_ssl

Les informations contenues dans les certificats d'authentification CPS sont rendues disponibles aux APIs applicatives par mod_ssl. La documentation de référence sur cet aspect est ici : http://httpd.apache.org/docs/2.2/mod/mod_ssl.html SSL_CLIENT_S_DN_x509 avec x509={C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email} (sans oublier le suffixe _n) permet de "parser" le DN du certificat client reçu. Si une des variables "de base" de mod_ssl n’expose pas la donnée du certificat requise, cette donnée peut être récupérée applicativement sur la base de l’examen de la valeur de SSL_CLIENT_CERT. Si Apache 2.4 est utilisé, de nouvelles variables sont exposées (SAN par exemple) : http://httpd.apache.org/docs/current/fr/mod/mod_ssl.html

20.2 Normes des informations récupérées depuis un certificat CPS

La documentation de référence sur cet aspect est ici : http://integrateurs-cps.asipsante.fr/documents/Sp%C3%A9cifications-des-certificats-X-509-CPS2ter-et-CPS3

En particulier : http://integrateurs-cps.asipsante.fr/documents/IGC-CPS2ter-Certificats-X.509-CPS2ter-et-CPS3.1-V1.1_0.pdf , page 21, page 30, et plus pour les extensions « propriétaires » ASIP : On y trouve, pour donner un exemple, que les certificats CPS contiennent une extension propriétaire gipProfessionCode { id-gip-carte-at 7 } dont l’OID est 0x2A 81 7A 01 47 01 02 07. Et que cette extension gipProfessionCode :

· est optionnelle

· qu’elle concerne uniquement des certificats liés aux cartes de type CPS · qu’elle contient le code de profession du Professionnel de Santé et qu’elle suit la

nomenclature : Table G15 – Professions

Page 147: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

147 / 155

La nomenclature est disponible ici : http://integrateurs-cps.asipsante.fr/logiciels/Fichier-DICO-FR.GIP On peut lire dans DICO-FR.GIP que la table G15 contient les valeurs suivantes :

Line 19: NOM_TABLE G15 11 Professions

Line 49: NOM_CHAMP G15 10 Profession

Line 822: G15 10 7 Médecin

Line 823: G15 21 10 Pharmacien

Line 824: G15 26 16 Audioprothésiste

Line 825: G15 28 17 Opticien-Lunetier

Line 826: G15 40 19 Chirurgien-Dentiste

Line 827: G15 50 10 Sage-Femme

Line 828: G15 60 9 Infirmier

Line 829: G15 69 23 Infirmier psychiatrique

Line 830: G15 70 24 Masseur-Kinésithérapeute

Line 831: G15 80 18 Pédicure-Podologue

Line 832: G15 81 16 Orthoprothésiste

Line 833: G15 82 15 Podo-Orthésiste

Line 834: G15 83 23 Orthopédiste-Orthésiste

Line 835: G15 84 10 Oculariste

Line 836: G15 85 11 Epithésiste

Line 837: G15 86 26 Technicien de labo médical

Line 838: G15 91 13 Orthophoniste

Line 839: G15 92 11 Orthoptiste

Line 840: G15 94 14 Ergothérapeute

Line 841: G15 95 11 Diététicien

Line 842: G15 96 15 Psychomotricien

Line 843: G15 98 16 Manipulateur ERM

Tableau 122: Contenu de la table G15

Par exemple, une carte CPS porteuse d’un certificat d’authentification du type :

Figure 42: Exemple de certificat d'authentification d'une carte CPS médecin

est une carte CPS de médecin.

Page 148: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

148 / 155

Une autre documentation utile: http://annuaire.asipsante.fr/, onglet « informations », document « DIR-CPS Schema_DIT v3d.pdf » (lien direct: http://annuaire.asipsante.fr/doc/DIR-CPS%20Schema_DIT%20v3d.pdf)

Cette documentation fait le lien entre certificats carte et entrées LDAP dans l’annuaire "asipsante".

Ceci étant dit, le traitement des informations contenues dans les certificats CPS doit être limité au traitement du seul CN/PS_IdNat, qui sert de point d'entrée dans des bases de données à jour contenant des informations relatives au porteur. Il est ainsi possible de consolider de l’information au sujet du porteur à l’aide de https://annuaire.sante.fr/ (extractions ou Web-Services : http://esante.gouv.fr/services/referentiels/identification/les-web-services-annuairesantefr)

Tableau 123 : CN / PS_IdNat : seule donnée à traiter

20.3 CN/PS_IdNat: seule information du certificat à traiter L'identifiant unique du porteur, seule information à traiter, est porté par le champ CN du DN: CN= « PS_IdNat »

Cet identifiant peut être un identifiant RPPS, Adeli…, le type d’identifiant étant porté par le premier digit (page 9/31 du document « DIR-CPS Schema_DIT v3d.pdf ») :

Type Identification personne 0 N° ADELI (CPS) 1 Id Cabinet / N° de registre (CPE) 2 N° DRASS (SIRIUS) (CPF) 3 FINESS / N° de registre (CDE / CPE) 4 SIREN / N° de registre (CDE / CPE / CPA) 5 SIRET / N° de registre (CDE / CPE / CPA) 6 Id Cabinet RPPS / N° de registre (CPE)

8 N° RPPS (CPS) 9 N° d’étudiant (Remplaçants/Étudiants)

Tableau 124: Types d'identifiants "PS_IdNat"

21 Annexe – Récupération du certificat CPS en PHP En authentification mutuelle par CPS sur un serveur PHP:

utiliser $_SERVER['SSL_CLIENT_CERT'] et attaquer ensuite via openssl_x509_parse (cf. plus haut)

puis utiliser les extensions OpenSSL pour PHP http://php.net/openssl(openssl_x509_parse, http://trac.roundcube.net/attachment/ticket/1485224/certificatelogon.php par exemple).

ne traiter que le CN / le PS_IdNat comme entrée du module d'habilitation

Page 149: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

149 / 155

22 Annexe – Messages d'erreur Apache

Message de log Explication

invalid CA [DN] Lors de la vérification du certificat client, les paramètres de la CA (identifiée par DN), faisant partie de la chaine de certification du client, sont invalides, par exemple le Key Usage ne permet pas la signature de certificat.

Cannot retrieve public key of CA [DN] Impossible de récupérer la clef publique du certificat de la CA identifiée par [DN].

signature verification of cert [DN_CERT] against CA [DN_CA] pubkey failed

La vérification de la signature du certificat identifié par [DN_CERT] par la CA identifiée par [DN_CA] a échoué.

error in 'not before' field of cert [DN] Le champ "not before" du certificat identifié par [DN] est invalide

cert [DN] not yet valid Le certificat identifié par [DN] n'est pas encore valide.

Le certificat identifié par [DN] n'est pas encore valide.

error in 'not after' field of cert [DN] Le champ "not after" du certificat identifié par [DN] est invalide

cert [DN] has expired Le certificat identifié par [DN] est expiré.

error in 'last update' field of CRL issued by [DN]

Le champ "last update" de la CRL signée par la CA identifiée par [DN] est invalide.

CRL issued by [DN] not yet valid CRL signée par la CA identifiée par [DN] n'est pas encore valide.

error in 'next update' field of CRL issued by [DN]

Le champ "next update" de la CRL signée par la CA identifiée par [DN] est invalide.

CRL issued by [DN] has expired La CRL signée par la CA identifiée par [DN] est expiré.

signature verification of crl against CA [DN] pubkey failed

La vérification de la signature de la CRL par la CA identifiée par [DN] a échoué.

while checking cert [DN]: cert chain is too long

La chaine de certification permettant de vérifier le certificat identifié par [DN est trop longue.

auto signed cert [DN] is untrusted Le certificat auto signé identifié par [DN] n'est pas de confiance.

unable to get issuer cert for [DN] Le certificat de l'autorité ayant signé le certificat identifié par [DN] ne peut être trouvé.

could not find a signer for CRL issued for CA [DN]

Le certificat de l'autorité ayant signé la CRL du CA identifié par [DN] ne peut être trouvé.

cert [DN] has been revoked Le certificat identifié par [DN] a été révoqué.

Tableau 125 : Apache : Messages d’erreur

Page 150: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

150 / 155

23 Annexe – Liste des tables Tableau 1 : Glossaire ............................................................................................................................... 9 Tableau 2 : Entreprises citées ................................................................................................................ 10 Tableau 3 : Avertissements ................................................................................................................... 11 Tableau 4 : Prérequis ............................................................................................................................. 12 Tableau 5 : IGC-Santé: Simplification de la vérification de statut de certificat ..................................... 19 Tableau 6 : IGC-Santé: Indications présentées dans le présent document valides .............................. 19 Tableau 7 : OpenSSL : vérification de la version courante .................................................................... 20 Tableau 8 : DER versus PEM .................................................................................................................. 20 Tableau 9 : OpenSSL : Conversion d’un certificat ou d’une CRL du format DER vers PEM ................... 21 Tableau 10 : OpenSSL et CRL ASIP Santé : premier essai ...................................................................... 22 Tableau 11 : OpenSSL et CRL ASIP Santé : résultat du premier essai .................................................... 22 Tableau 12 : Principe de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché .................. 23 Tableau 13 : Ligne de commande de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché ............................................................................................................................................................... 24 Tableau 14 : Résultats de la vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché ............ 24 Tableau 15 : Points vérifiés par le « OpenSSL verify crl_check » sur un certificat final ........................ 25 Tableau 16 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 non patché ............................................................................................................................................. 26 Tableau 17 : Résultat de la ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 non patché ..................................................................................................................... 26 Tableau 18 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1 patché .................................................................................................................................................... 28 Tableau 19 : Authentification simple du serveur .................................................................................. 29 Tableau 20 : Authentification mutuelle avec un certificat client logiciel .............................................. 29 Tableau 21: Conversion du PKCS12 ASIP Santé en deux fichiers (certificat, clé privée) au format PEM séparés .................................................................................................................................................. 29 Tableau 22 : Consommation du flux HTTP ............................................................................................ 30 Tableau 23 : Manuel d’installation et d’utilisation de la Cryptolib CPS ................................................ 32 Tableau 24 : chargement de engine_pkcs11 sous Windows ................................................................ 34 Tableau 25 : chargement de engine_pkcs11 sous Linux ....................................................................... 34 Tableau 26 : chargement de engine_pkcs11 sous Mac OS X ................................................................ 34 Tableau 27 : Options utilisées ............................................................................................................... 35 Tableau 28 : fichier openssl.cfg ............................................................................................................. 35 Tableau 29 : Vérification du chargement de engine_pkcs11 ................................................................ 36 Tableau 30 : liste de fonctions pouvant utiliser un moteur pkcs#11 en argument .............................. 37 Tableau 31 : Paramètres d’utilisation du moteur PKCS#11 .................................................................. 38 Tableau 32 : Liste des identifiants de clé .............................................................................................. 38 Tableau 33 : OpenSSL : req .................................................................................................................... 39 Tableau 34 : OpenSSL : smime .............................................................................................................. 40 Tableau 35 : OpenSSL : rand .................................................................................................................. 40 Tableau 36 : OpenSSL : s_client ............................................................................................................. 41 Tableau 37 : OpenSSL : dgst .................................................................................................................. 42 Tableau 38 : OpenSSL : speed ............................................................................................................... 42 Tableau 39 : OpenSSL : x509 ................................................................................................................. 43 Tableau 40 : Utilisation du moteur PKCS#11 OpenSC pour OpenSSL en sans-contact ......................... 44 Tableau 41 : Restriction d’usage – Limites ............................................................................................ 45 Tableau 42 : Caractéristique des certificats CPx à l’origine du problème constaté .............................. 46 Tableau 43 : Versions d’OpenSSL concernées ....................................................................................... 47 Tableau 44 : Extrait du changelog d’OpenSSL ....................................................................................... 47

Page 151: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

151 / 155

Tableau 45 : Patch OpenSSL : Mise à disposition .................................................................................. 48 Tableau 46 : Patch OpenSSL : Application ............................................................................................. 48 Tableau 47 : Patch OpenSSL : Compilation............................................................................................ 48 Tableau 48 : Patch OpenSSL : Intérêts................................................................................................... 48 Tableau 49 : Patch OpenSSL : Mise à disposition .................................................................................. 48 Tableau 50 : Correction du problème "unused bit" sous F5 ................................................................. 49 Tableau 51 : Avertissement ................................................................................................................... 50 Tableau 52 : Exemple de fonction permettant le chargement du module PKCS#11 ............................ 51 Tableau 53 : Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL ............................................................................................................................................................... 53 Tableau 54 : Exemple de fonction permettant la récupération d’une clé publique de la carte CPx .... 55 Tableau 55 : Prérequis ........................................................................................................................... 58 Tableau 56 : Brief project ...................................................................................................................... 61 Tableau 57 : Ressources nécessaires ..................................................................................................... 62 Tableau 58 : Livrables « maquette authentification mutuelle » ........................................................... 63 Tableau 59 : Macro-planning « maquette authentification mutuelle » ................................................ 65 Tableau 60 : Remarques « maquette de Smartcard logon avec une carte CPx » ................................. 67 Tableau 61 : Apache : Outils nécessaires à l'application du patch et à la compilation ......................... 68 Tableau 62 : Environnement ................................................................................................................. 69 Tableau 63 : Linux/OpenSSL : systèmes de référence ........................................................................... 70 Tableau 64 : OpenSSL : Archives de sources ......................................................................................... 70 Tableau 65 : OpenSSL : Installation ....................................................................................................... 70 Tableau 66 : OpenSSL : Compilation et installation .............................................................................. 71 Tableau 67 : OpenSSL : liste des cipher suites supportées en TLS 1.2 à base de RSA ........................... 72 Tableau 68 : Cryptolib CPS : logs PKCS#11 ............................................................................................ 75 Tableau 69 : Google Chrome : Code source de BoringSSL .................................................................... 76 Tableau 70 : OpenSSL : Code source des algorithmes en TLSv1.2 ........................................................ 76 Tableau 71 : OpenSSL : Code source du ClientHello ............................................................................. 77 Tableau 72 : Activation TLS v1.2 : Paramètres à prendre en compte ................................................... 78 Tableau 73 : Contournement serveur ................................................................................................... 79 Tableau 74 : TLS 1.2: Contournement pour un frontal BIG-IP de F5 ..................................................... 80 Tableau 75 : TLS 1.2: Contournement pour un frontal BIG-IP de F5: TLS 1.2 et SHA256 en échange de clé .......................................................................................................................................................... 80 Tableau 76 : Linux/Apache HTTPD : systèmes de référence ................................................................. 81 Tableau 77 : Apache : Archives de sources ........................................................................................... 81 Tableau 78 : Apache : Compilation et installation ................................................................................ 82 Tableau 79 : Obtention d’un bi-clé pour l’authentification du serveur SSL .......................................... 84 Tableau 80 : Apache : Configuration du certificat SSL serveur ............................................................. 85 Tableau 81 : Apache : Configuration de la chaine de confiance ASIP Santé et Activation de l’authentification par carte CPx ............................................................................................................. 87 Tableau 82 : Gestion des CRLs ASIP Santé avec l'IGC-Santé .................................................................. 89 Tableau 83 : Apache : Recommandations d’utilisation des CRLs ASIP Santé ........................................ 90 Tableau 84 : Apache : Configurations des CRLs ..................................................................................... 90 Tableau 85 : Configuration des CRLs ASIP Santé avec les IGC de Santé actuelles ................................ 91 Tableau 86 : Configuration des CRLs ASIP Santé avec l'IGC-Santé ........................................................ 91 Tableau 87 : IGC-Santé: Pas d’installation du patch ASIP Santé pour Apache HTTPD 2.2 .................... 92 Tableau 88 : Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD ..................... 93 Tableau 89 : F5 / Big IP : Pas d’installation de patch nécessaire sous BIG-IP 12.X+ .............................. 95 Tableau 90 : IGC de santé actuelles, Apache 2.4 et NGinx: Pas de support de Apache 2.4 et de NGinx ............................................................................................................................................................... 96 Tableau 91 : IGC-Santé, Apache 2.4 et NGinx : support de Apache 2.4 et de NGinx avec la IGC-Santé 96 Tableau 92 : Apache : Directives Apache HTTPD / mod_ssl ................................................................ 101

Page 152: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

152 / 155

Tableau 93 : Microsoft IIS 5 : Configuration ........................................................................................ 103 Tableau 94 : Microsoft IIS 7 : Configuration ........................................................................................ 104 Tableau 95 : Microsoft IIS 7 : Configuration des autorités clientes acceptées ................................... 105 Tableau 96 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client ............. 106 Tableau 97 : F5 / Big IP : Pas d’installation de patch nécessaire sous BIG-IP 12.X+ ............................ 107 Tableau 98 : F5: TLS 1.2: Contournement pour un frontal BIG-IP de F5 ............................................. 107 Tableau 99 : F5: TLS 1.2: Contournement pour un frontal BIG-IP de F5: TLS 1.2 et SHA256 en échange de clé ................................................................................................................................................... 107 Tableau 100 : F5: Correction du problème "unused bit" sous BIG-IP ................................................. 107 Tableau 101 : F5: Support de SHA2 par F5 pour les chaines IGC-Santé .............................................. 108 Tableau 102 : F5: Ecriture du certificat client dans le header HTTP ................................................... 108 Tableau 103 : F5: Récupération du certificat client depuis le header HTTP dans l'application .......... 108 Tableau 104 : Authentification mutuelle par carte CPx : Expression du besoin ................................. 115 Tableau 105 : Authentification mutuelle par carte CPx : Expression du besoin ................................. 118 Tableau 106 : Windows 7 / Internet Explorer : Résultats ................................................................... 129 Tableau 107 : Remarque PoC .............................................................................................................. 129 Tableau 108 : Windows 7 / Mozilla Firefox : Configuration ................................................................ 130 Tableau 109 : Windows 7 / Mozilla Firefox : Résultats ....................................................................... 130 Tableau 110 : Windows 7 / Google Chrome: Configuration ............................................................... 131 Tableau 111 : Windows 7 / Google Chrome : Résultats ...................................................................... 131 Tableau 112 : Windows 7 / Google Chrome : Remarques .................................................................. 131 Tableau 113 : Mac OS X / Safari : Remarques ..................................................................................... 132 Tableau 114 : Mac OS X / Mozilla Firefox : Résultats .......................................................................... 135 Tableau 115 : Mac OS X / Google Chrome: Résultats ......................................................................... 138 Tableau 116 : Mac OS X / Google Chrome: Remarques ...................................................................... 138 Tableau 117 : Apache : Configuration Apache 1 ................................................................................. 140 Tableau 118 : Apache : Documentation de la configuration Apache utilisée ..................................... 143 Tableau 119 : Apache : Remarques sur la configuration utilisée ........................................................ 144 Tableau 120 : Client : Configurations utilisées .................................................................................... 145 Tableau 121 : Serveurs : Configurations utilisées ............................................................................... 145 Tableau 122: Contenu de la table G15 ................................................................................................ 147 Tableau 123 : CN / PS_IdNat : seule donnée à traiter ......................................................................... 148 Tableau 124: Types d'identifiants "PS_IdNat" ..................................................................................... 148 Tableau 125 : Apache : Messages d’erreur ......................................................................................... 149

Page 153: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

153 / 155

24 Annexe – Liste des figures Figure 1 : Signature de certificats .......................................................................................................... 14 Figure 2 : Signature de CRLs .................................................................................................................. 14 Figure 3 : Signature de certificats et de CRLs ........................................................................................ 14 Figure 4 : Légende ................................................................................................................................. 16 Figure 5 : Vérification des CRLs Classe 4 ASIP Santé ............................................................................. 17 Figure 6 : Vérification des CRLs Classe 0, 1, 2 et 3 ASIP Santé .............................................................. 18 Figure 7 : Vérification des CRLs ASIP Santé avec la IGC-Santé .............................................................. 19 Figure 8 : Root CA ASIP Santé au format DER ....................................................................................... 20 Figure 9 : Root CA ASIP Santé au format PEM ....................................................................................... 20 Figure 10 : Principe d’utilisation d’OpenSSL avec un serveur Web ....................................................... 56 Figure 11 : Principe de l’authentification mutuelle ............................................................................... 57 Figure 12 : Authentification mutuelle : un projet complet ................................................................... 60 Figure 13 : Logique générale de l’implémentation de l’authentification mutuelle sur HTTPS ............. 64 Figure 14 : Macro planning .................................................................................................................... 66 Figure 15: Erreur d'authentification par CPx sous Mac OS X / Chrome 39+ ......................................... 74 Figure 16 : Thawte: SSL Toolbox ............................................................................................................ 86 Figure 17 : Symantec: SSL Toolbox ........................................................................................................ 86 Figure 18 : Microsoft IIS 7 : Configuration des autorités clientes acceptées ...................................... 105 Figure 19 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client ................ 106 Figure 20 : Windows : IE : Connexion sur la page d’accueil ................................................................ 119 Figure 21 : Windows : IE : Insertion carte ........................................................................................... 120 Figure 22 : Windows : IE : Sélection certificat ..................................................................................... 121 Figure 23 : Windows : IE : Saisie code porteur .................................................................................... 122 Figure 24 : Windows : IE : Page de service .......................................................................................... 123 Figure 25 : Windows : IE : Déconnexion sans arrachage carte : retour à la page d’accueil ................ 124 Figure 26 : Windows : IE : Déconnexion sans arrachage carte : re-sélection du certificat, pas de code porteur ................................................................................................................................................ 125 Figure 27 : Windows : IE : Déconnexion sans arrachage carte : reconnexion au service ................... 126 Figure 28 : Windows : IE : Pas de déconnexion + Arrachage carte + F5 sur la page de service .......... 127 Figure 29 : Windows : IE : Attente de chargement de certificat ......................................................... 128 Figure 30 : Windows : IE : Bouton inactif pendant l’attente de chargement du certificat ................. 128 Figure 31 : Mac OS X : Mozilla Firefox : Version utilisée ..................................................................... 132 Figure 32 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 133 Figure 33 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 133 Figure 34 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 134 Figure 35 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 134 Figure 36 : Mac OS X : Mozilla Firefox : Connexion sur la page protégée de service .......................... 134 Figure 37 : Mac OS X : Google Chrome : Version utilisée .................................................................... 136 Figure 38 : Mac OS X : Google Chrome : Connexion à la page d’accueil ............................................. 136 Figure 39 : Mac OS X: Google Chrome : Insertion carte ...................................................................... 137 Figure 40 : Mac OS X : Google Chrome : Sélection du certificat ......................................................... 137 Figure 41 : Mac OS X : Google Chrome : Saisie du code porteur ........................................................ 137 Figure 42: Exemple de certificat d'authentification d'une carte CPS médecin ................................... 147

Page 154: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes

ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé 31/03/2017

154 / 155

25 Notes [fin du document]

Page 155: Utilisation de OpenSSL mod ssl - ASIP Santéintegrateurs-cps.asipsante.fr/sites/default/files/ASIP-PUSC-PSCE... · ASIP Santé Utilisation de OpenSSL et de mod_ssl avec les cartes