Post on 14-Sep-2018
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
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é
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
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
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
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
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
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
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
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
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 editeurs@asipsante.fr 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: editeurs@asipsante.fr
Tableau 3 : Avertissements
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
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).
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
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.
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
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
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
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
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
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
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.
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é
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é
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
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é
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%
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é
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
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
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)
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/
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
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
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
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.
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é.
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
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
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
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).
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
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
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
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
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).
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
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
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
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>
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
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; }
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
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");
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
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
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
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
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.
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
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
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
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 »
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
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 »
Figure 14 : Macro planning
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 »
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).
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
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
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.
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
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).
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+
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 ».
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.
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
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
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
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é
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) :
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
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.
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
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.
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.
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
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é.
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.
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.
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é
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.
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
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
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+
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
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!
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
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
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
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
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)
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
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
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
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
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
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
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
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 »
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
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é.
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
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)
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}
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…
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}
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.
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
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.
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é.
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.
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.
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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).
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
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
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
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
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
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.
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
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
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
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
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
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
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]