Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les

Transcription

Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les
OpenSSL
et de mod_ssl
Utilisation de
avec les
cartes CPx
et les produits de
certification
de l’ASIP
Santé
Version 3.0.0 du 05/10/2015
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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.0.0 du 05/10/2015
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é
2 / 143
Historique du document
Version
2.7.0
Date
12/11/2014
Auteur
Commentaires
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 PFCNG
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.0.0
05/10/2015
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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)
o IGC-CPS2ter (« Classes » 0 à 3)
o PFCNG (déploiement à venir)
d’expliquer comment utiliser OpenSSL avec le moteur PKCS#11 « engine_pkcs11 » pour
accéder à la carte CPx et lui faire réaliser des opérations cryptographiques.
4 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
2 Sommaire
1
Résumé ............................................................................................................................................ 4
2
Sommaire ........................................................................................................................................ 5
3
Glossaire .......................................................................................................................................... 8
4
Liste des entreprises citées ............................................................................................................. 9
5
Avertissements .............................................................................................................................. 10
6
Audience ........................................................................................................................................ 11
7
Prérequis ....................................................................................................................................... 11
8
Présentation de OpenSSL .............................................................................................................. 12
9 Utilisation de OpenSSL pour la vérification du statut des certificats émis par les IGCs de l’ASIP
Santé ...................................................................................................................................................... 13
9.1
Les rôles des certificats AC des IGCs de l’ASIP Santé ............................................................ 13
9.2
Principe général de vérification du statut d’un certificat avec une CRL ............................... 14
9.3
Schémas illustrant la vérification du statut des certificats émis par les IGCs de l’ASIP Santé
15
9.3.1
Vérification du statut des certificats Classe 4, 5 et 6 de l’ASIP Santé ........................... 15
9.3.2
Vérification du statut des certificats Classe 0, 1, 2 et 3 de l’ASIP Santé ....................... 17
9.3.3
Vérification du statut des certificats PFCNG de l’ASIP Santé ........................................ 18
9.4
Vérification de la version d’OpenSSL courante ..................................................................... 19
9.5
ASN.1 versus PEM.................................................................................................................. 19
9.6
Validation « classique » ......................................................................................................... 21
9.7
Le principe de vérification des statuts des certificats ASIP Santé avec OpenSSL .................. 22
9.7.1
Ligne de commande ...................................................................................................... 23
9.7.2
Résultats possibles ........................................................................................................ 23
9.8
Vérification complète ............................................................................................................ 24
9.9
Intégration de la vérification ................................................................................................. 26
9.9.1
Par tâche programmée .................................................................................................. 26
9.9.2
Dans une application ..................................................................................................... 26
9.10 Vérification complète avec OpenSSL patché ......................................................................... 27
10 Utilisation de OpenSSL en tant que client HTTPS .......................................................................... 28
10.1 Authentification simple du serveur ....................................................................................... 28
10.2 Authentification mutuelle avec un certificat client logiciel................................................... 28
10.3 Consommation du flux HTTP ................................................................................................. 28
11 Utilisation du moteur PKCS#11 OpenSC pour OpenSSL ................................................................ 29
11.1 Prérequis « accès CPx » : identification du module PKCS#11 de l’ASIP Santé ...................... 29
11.1.1 Environnement Microsoft Windows ............................................................................. 29
11.1.2 Environnement Linux..................................................................................................... 29
11.1.3 Environnement Apple Mac OS X ................................................................................... 30
11.2 Prérequis « Extension OpenSC pour OpenSSL » : récupération et installation du moteur
PKCS#11 OpenSC ............................................................................................................................... 30
11.3 Chargement du moteur PKCS#11 OpenSC ............................................................................ 31
11.3.1 Principe du chargement ................................................................................................ 31
11.3.2 A partir d’un fichier de la ligne de commande .............................................................. 32
11.3.3 A partir d’un fichier de configuration ............................................................................ 33
11.3.4 Vérification .................................................................................................................... 34
11.4 Commandes OpenSSL............................................................................................................ 35
5 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.4.1 Liste des commandes .................................................................................................... 35
11.4.2 Description des paramètres communs ......................................................................... 35
11.5 Exemples de commandes OpenSSL utilisant la CPx via le moteur PKCS#11 OpenSC ........... 37
11.5.1 Génération d’une requête de certificat signée avec le certificat de signature de la carte
CPx
37
11.5.2 Signature d’un mail avec une carte CPx ........................................................................ 38
11.5.3 Génération d’un nombre pseudo-aléatoire à partir de la carte CPx ............................. 38
11.5.4 Connexion à un serveur sécurisé avec SSL .................................................................... 39
11.5.5 Hachage et signature d’un fichier ................................................................................. 40
11.5.6 Test de performances de l’algorithme de hachage ....................................................... 40
11.5.7 Signature d’une requête de demande de certificat ...................................................... 41
11.7 Utilisation en sans-contact .................................................................................................... 42
11.8 Restriction d’usage – limites ................................................................................................. 43
11.9 Problème « unused bit non nul sur le champ de signature des certificats CPx » aka « unused
bit » 44
11.9.1 Symptômes .................................................................................................................... 44
11.9.2 Causes du problème ...................................................................................................... 44
11.9.3 Lien avec OpenSSL ......................................................................................................... 44
11.9.4 Versions d’OpenSSL concernées.................................................................................... 45
11.9.5 Correction ...................................................................................................................... 46
11.10 Utilisation de OpenSSL comme bibliothèque ........................................................................ 47
11.10.1 Avertissement................................................................................................................ 47
11.10.2 Présentation .................................................................................................................. 47
11.10.3 Exemples de code .......................................................................................................... 48
12 Utilisation d’OpenSSL en HTTPS au travers de mod_ssl ............................................................... 53
12.1 Cadre d’utilisation ................................................................................................................. 53
12.2 Principe de l’authentification mutuelle................................................................................. 54
12.3 De la prise en main à la mise en production : un projet d’intégration complet ................... 55
12.3.1 Compétences requises .................................................................................................. 55
12.3.2 Prise en main / PoC ....................................................................................................... 56
12.4 Prise en main / PoC ............................................................................................................... 58
12.4.1 « Brief project » ............................................................................................................. 58
12.4.2 Ressources ..................................................................................................................... 59
12.4.3 Livrables ......................................................................................................................... 60
12.4.4 Tâches techniques à réaliser ......................................................................................... 61
12.4.5 Macro-Planning ............................................................................................................. 62
12.4.6 Remarques..................................................................................................................... 64
12.5 Configuration de OpenSSL sous Linux ................................................................................... 65
12.5.1 Outils nécessaires .......................................................................................................... 65
12.5.2 Privilèges........................................................................................................................ 66
12.5.3 Répertoire de base pour les installations ...................................................................... 66
12.5.4 Préparation de l’environnement ................................................................................... 66
12.5.5 Installation d'OpenSSL ................................................................................................... 67
12.5.6 Problème « TLS 1.2 » ..................................................................................................... 69
12.6 Serveur Apache HTTPD sous Linux ........................................................................................ 77
12.6.1 Systèmes de référence .................................................................................................. 77
12.6.2 Archives de sources ....................................................................................................... 77
12.6.3 Compilation et installation ............................................................................................ 77
12.6.4 Logique de configuration du serveur ............................................................................ 79
12.7 Configuration de mod_ssl pour l’authentification du serveur .............................................. 79
12.7.1 Obtention d’un bi-clé pour l’authentification du serveur SSL ....................................... 80
6 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.7.2 Configuration de Apache HTTPD / mod_ssl pour l’authentification du serveur ........... 81
12.7.3 Vérification de la configuration ..................................................................................... 82
12.8 Configuration de mod_ssl pour l’authentification du client ................................................. 83
12.8.1 Activation de l’authentification par carte CPx sans vérification des CRLs .................... 83
12.8.2 Vérification de la configuration ..................................................................................... 84
12.8.3 Gestion des CRLs ASIP Santé ......................................................................................... 85
12.9 Récapitulatif des directives Apache utilisées ........................................................................ 91
13 Annexe – Serveur Microsoft IIS ..................................................................................................... 97
13.1 Installation ............................................................................................................................. 97
13.1.1 Configuration de IIS 5 .................................................................................................... 97
13.1.2 Configuration de IIS 7 .................................................................................................... 98
14 Annexe – Obtention de cartes CPx de test .................................................................................. 101
15 Annexe – Obtention de certificats SSL Serveurs ......................................................................... 101
15.1 Certificats du « Commerce » ou issus d’une PKI interne .................................................... 101
15.2 Certificats Serveur ASIP Santé – « CSA – Classe 4 » ............................................................ 101
15.2.1 « CSA – Classe 4 » de test ............................................................................................ 101
15.2.2 « CSA – Classe 4 » de production ................................................................................ 102
15.2.3 CleoCPS ........................................................................................................................ 102
15.2.4 Configuration des postes clients se connectant vers un serveur présentant un certificat
« CSA - Classe 4 » ASIP Santé....................................................................................................... 103
16 Annexe – Conception d’un site Web utilisant l’authentification CPx: les grandes lignes ........... 104
16.1 Expression du besoin ........................................................................................................... 105
16.2 Diagnostic technique sur la base de l’expression de besoin ............................................... 107
16.3 Exemple d’application Web exploitant la CPx sous Microsoft Windows ............................ 110
16.3.1 Microsoft Internet Explorer ......................................................................................... 110
16.3.2 Mozilla Firefox ............................................................................................................. 121
16.3.3 Google Chrome ............................................................................................................ 122
16.4 Exemple d’application Web exploitant la CPx sous Apple Mac OS X .................................. 123
16.4.1 Apple Safari ................................................................................................................. 123
16.4.2 Mozilla Firefox ............................................................................................................. 123
16.4.3 Google Chrome ............................................................................................................ 127
16.5 Configurations testées......................................................................................................... 130
16.5.1 Configuration Apache 1 ............................................................................................... 130
16.5.2 Configuration Apache 2 ............................................................................................... 132
16.5.3 Configuration Apache 3 ............................................................................................... 132
16.5.4 Détails techniques de l’exemple (configuration Apache 1)......................................... 133
16.5.5 Reste à faire sur la configuration Apache utilisée (configuration Apache 1) .............. 135
16.5.6 Configurations utilisées en configuration Apache 1.................................................... 136
17 Annexe – Messages d'erreur Apache .......................................................................................... 137
18 Annexe – Liste des tables ............................................................................................................ 138
19 Annexe – Liste des figures ........................................................................................................... 141
20 Notes ........................................................................................................................................... 142
7 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
PFCNG
Plate-Forme de Certification Nouvelle Génération
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
8 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
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
9 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 nonrespect de ces procédures et des conditions normales d’utilisation d’OpenSSL, sa mise en œuvre est
susceptible d’engendrer des dysfonctionnements dans l’environnement de travail de l’entreprise.
En cas de dysfonctionnement, quel qu’il soit, l’ASIP Santé prêtera dans la mesure du possible
assistance à l’utilisateur, qui ne pourra rechercher sa responsabilité en cas de non-respect des
procédures décrites dans le présent manuel.
Sur les liens externes
Le présent manuel contient des liens vers des sites Internet.
Ces liens ne visent qu'à informer l’utilisateur. Ces sites Web ne sont pas gérés par l'ASIP Santé et
l'ASIP Santé n’exerce sur eux aucun contrôle : leur mention ne saurait engager l’ASIP Santé quant à
leur contenu.
L'utilisation des sites tiers mentionnés relève de la seule responsabilité du lecteur ou de l'utilisateur
des produits documentés.
Sur les copies d’écran et les lignes de commande
Les lignes de commandes données ci-après le sont à titre indicatif. Elles documentent des cas «
passants » qui peuvent différer d’un système à l’autre.
Les copies d’écran présentées dans ce document sont données à titre illustratif.
Les pages ou écrans réellement affichés peuvent être différents, notamment en raison de montées
de version ou de configurations d’environnements différentes.
Citations
L’ASIP Santé est contrainte de citer le nom de certaines entreprises recensées au tableau n°2 afin
d’apporter toute l’aide nécessaire aux utilisateurs.
Les entreprises citées peuvent prendre contact avec l’ASIP Santé à l’adresse email
[email protected] pour toute demande en lien avec la citation les concernant.
Les entreprises non citées dans ce manuel et ayant une activité en lien avec OpenSSL et les IGC de
Santé peuvent également se faire connaître auprès de l’ASIP Santé en la contactant à la même
adresse.
Contact
Toute question en rapport avec le contenu du présent manuel doit être adressée à l’adresse
suivante: [email protected]
Tableau 3 : Avertissements
10 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
Microsoft Windows (Windows 7 ou supérieur)
1
Système d’exploitation
Linux
Mac OS X
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+)
2
Tableau 4 : Prérequis
11 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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).
12 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 la PFCNG) 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
13 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
14 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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 :
Formes = personnes
morales ou physiques
AC racine
AC intermédiaire
Entité Finale
Couleurs = niveau hiérarchique
racine
intermédiaire
final
Ex. : Certificat correspondant
à une autorité racine
Certificat
CRL
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).
15 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Le principe de signature des certificats et des CRLs Classe 4 de l’ASIP Santé est le suivant :
Matérialisée par
ACR
CRLSign
signe
signe
Autorité
racine
ACR
CRL
Matérialisée par
ACR
CertSign
Garantit
signe
Autorité
intermédiaire
ACI
CertSign +
CRLSign
Matérialisée par
A vérifier avec
ACI
CRL
signe
signe
Garantit
A vérifier avec
Entité finale
Matérialisée par
Certificat
Entité Final
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.
16 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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 :
Matérialisée par
ACR
CRLSign
signe
signe
Autorité
racine
ACR
CRL
Matérialisée par
ACR
CertSign
A vérifier avec
signe
Garantit
Matérialisée par
ACI
CRLSign
signe
Autorité
intermédiaire
ACI
CRL
Matérialisée par
ACI
CertSign
Garantit
A vérifier avec
signe
Entité finale
Matérialisée par
Certificat
Entité Final
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.
17 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
9.3.3 Vérification du statut des certificats PFCNG de l’ASIP Santé
La PFCNG remplace les IGC de Santé 2bis (Classes 4, 5 et 6) et 2Ter (Classes 0, 1, 2 et 3).
La PFCNG est présentée dans des documents dédiés. Pour ce qui concerne le présent document, il
faut retenir que la PFCNG simplifie l’arborescence de signature. Le principe de signature des
certificats et des CRLs PFCNG de l’ASIP Santé est le suivant :
signe
Matérialisée par
Autorité
racine
ACR
CertSign
+ CRLSign
+ CRLSign
Garantit
signe
Autorité
intermédiaire
ACI
CertSign +
CRLSign
Matérialisée par
ACR
CRL
A vérifier avec
ACI
CRL
signe
signe
Garantit
A vérifier avec
Entité finale
Matérialisée par
Certificat
Entité Final
Figure 7 : Vérification des CRLs ASIP Santé avec la PFCNG
Ceci permet d’identifier les actions à mener pour vérifier l’état de révocation d’un certificat PFCNG :
Il faudra vérifier cinq certificats dans deux CRLs associées.
PFCNG
Les CRLs sont désormais signées avec le même bi-clé que celui
ayant signé le certificat associé.
Tableau 5 : PFCNG : Simplification de la vérification de statut de certificat
PFCNG
Les indications présentées dans la suite du document restent
valables en PFCNG.
Tableau 6 : PFCNG : Indications présentées dans le présent document valides
18 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
19 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
20 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
21 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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é
22 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
Certificats ASIP Santé racine et intermédiaire de
signature de certificats
Certificats ASIP Santé racine et intermédiaire de
signature de CRLs
-CAfile prod-cer.pem
-untrusted prod-crl.pem
-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
Erreur de paramétrage de
OpenSSL
mettre les certificats racines et
intermédiaires dans CAfile et
untrusted, utiliser untrusted et
extended_crl
error 3 at 0 depth lookup:unable
to get certificate CRL
Tableau 14 : Résultats de la vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché
23 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
24 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
La ligne de commande complète est donc :
Exemple pour une vérification de certificat Classe 4
openssl verify -verbose
-untrusted %PKI_ASIP_CERT_FOLDER%prod-crl.pem
-CAfile
-CRLfile
%PKI_ASIP_CERT_FOLDER%prod-cer.pem
%CRL_FOLDER%bag-crl.pem
https://www.openssl.org/docs/apps/verify.html
Certificats intermédiaires et racines de
signature de CRLs
Certificats intermédiaires et racines de
signature de certificats
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
%PKI_ASIP_CERT_FOLDER%inter-ac-classe-X-crl.pem
Certificat intermédiaire de signature de
certificats Classe X (X = {0, 1, 2, 3, 4})
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-acclasse-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é
25 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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%
26 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 PFCNG.
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édiaire
s de signature
de CRLs
N/A
-CAfile %PKI_ASIP_CERT_FOLDER%prod-cer.pem
Certificats
intermédiaire
s et racines
de signature
de certificats
-CRLfile %CRL_FOLDER%bag-crl.pem
CRLs ASIP Santé
-crl_check
Seul
crl_check
fonctionne
-extended_crl
Le patch peut être adapté
pours’affranchir de
« extended_crl »
-extended_crl
%PKI_ASIP_CERT_FOLDER%root-cer.pem
Root CA GIPCPS de
signature de
certificats
N/A
%PKI_ASIP_CERT_FOLDER%root-crl.pem
CA GIP-CPS
intermédiaire
de signature
de CRL
%PKI_ASIP_CERT_FOLDER%inter-ac-classe-Xcer.pem
Certificat
intermédiaire
de signature
de certificats
Classe X (X =
{0, 1, 2, 3, 4})
%PKI_ASIP_CERT_FOLDER%inter-ac-classe-Xcrl.pem
%CRT_FOLDER%certificat.pem
Certificat
intermédiaire
de signature
de CRL Classe
X (X = {0, 1, 2,
3,4})
Le magasin
untrusted
n’est pas
nécessaire
Certificats
intermédiaire
s et racines
de signature
de CRLs et de
certificats
-CAfile %PKI_ASIP_CERT_FOLDER%prodcer.pem
-CRLfile %CRL_FOLDER%bag-crl.pem
Les 2 options
crl_check ou
crl_check_all
fonctionnent
Pas
nécessaire si
l’option
crl_check_all
est utilisée
-crl_check | -crl_check_all
N/A
N/A
Le patch est
tel que le
statut des
certificats de
signature de
CRL n’est pas
vérifié.
%PKI_ASIP_CERT_FOLDER%inter-ac-classe-Xcrl.pem
A faire en
ligne de
commande,
en particulier
en utilisation
avec mod_ssl.
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é
27 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
10Utilisation 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 -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 -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é Classe 4.
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 21 : Consommation du flux HTTP
28 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11Utilisation du 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)
29 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 22 : 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/
30 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
31 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 23 : 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 24 : 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 25 : chargement de engine_pkcs11 sous Mac OS X
32 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.3.2.4 Options utilisées
Option
Commande
Description
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
dynamic
chargement du module en mémoire de manière partagée
-pre
-t
Tableau 26 : 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 27 : fichier openssl.cfg
33 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 28 : Vérification du chargement de engine_pkcs11
Le module PKCS#11 est alors chargé en mémoire et prêt à être utilisé par OpenSSL.
34 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
req
smime
x509
dgst
rsautl (dépréciée)
Description
Création de demande de certificats (ou de certificats auto signés)
Gestion des smimes: signature/chiffrement/déchiffrement de mails
Gestion de certificats : lecture/conversion/signature
Fonctions de hachage : création de condensat/signature/vérification signature
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
s_client
s_server
pkcs7
rand
speed
Utilitaire de chiffrement
Fonctions SSL/TLS clientes : connexion à un serveur SSL
Fonctions SSL/TLS serveurs : création de serveur SSL
Gestion de PKCS#7 : Conversions
Génération de nombre pseudo aléatoire
Test de performances des algorithmes de cryptographies
Tableau 29 : 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.
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>.
-key ID
<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é.
35 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Paramètre
05/10/2015
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 ciaprè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 30 : 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
CPS2ter2
id : 01000000
id : 04000000
N/A
CPS3
id : 01000000
id : 04000000
N/A
CPS2ter
id : 1217
id : 1216
N/A
CPS3
id :
E828BD080F8025000
001FF001001
id :
E828BD080F8025000
001FF001002
label : CPS_PRIV_SIG
label : CPS_PRIV_AUT
v4
v5
id :
E828BD080F8025000001
FF001003
label :
CPS_PRIV_TECH_AUT
Tableau 31 : 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
36 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 32 : OpenSSL : req
37 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.5.2 Signature d’un mail avec une carte CPx
Paramètre
Description
OpenSSL>
La documentation de référence pour cette commande
est : https://www.openssl.org/docs/apps/smime.html
smime
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 33 : 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>
La documentation de référence pour cette commande
est : https://www.openssl.org/docs/apps/rand.html
rand
rand ne supporte pas -config : passer par
OPENSSL_CONF
-engine pkcs11
10
ici 10 : génération de 10 nombres aléatoires
Tableau 34 : OpenSSL : rand
38 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.5.4 Connexion à un serveur sécurisé avec SSL
Paramètre
Description
OpenSSL>
La documentation de référence pour cette
commande est :
https://www.openssl.org/docs/apps/s_client.html
s_client
s_client ne supporte pas -config : passer par
OPENSSL_CONF
-connect testssl.asipsante.fr:443
URL du site distant sécurisé en SSL.
-engine pkcs11
-state
-showcerts
-keyform engine
-key E828BD080F8025000001FF001002
-CAfile c:\ca-bundle.cer
identifiant de clé privée d’authentification dans la
carte (voir section « paramètres »)
Dans cet exemple ce sont les certificats d’autorité
ASIP Santé Classe 4 (pour vérification du certificat
serveur)
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)
-cert c:/auth.pem
-certform PEM
-ssl3
-debug
Tableau 35 : 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).
39 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.5.5 Hachage et signature d’un fichier
Paramètre
Description
OpenSSL>
La documentation de référence pour cette
commande est :
https://www.openssl.org/docs/apps/dgst.html
dgst
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 36 : 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 37 : OpenSSL : speed
40 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.5.7 Signature d’une requête de demande de certificat
Paramètre
Description
OpenSSL>
La documentation de référence pour cette commande
est : https://www.openssl.org/docs/apps/x509.html
x509
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 38 : OpenSSL : x509
41 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 -engine pkcs11 -state -showcerts -keyform engine -key
label_CPS_PRIV_TECH_AUT -CAfile … -certform PEM -ssl3 -debug
Tableau 39 : Utilisation du moteur PKCS#11 OpenSC pour OpenSSL en sans-contact
42 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 40 : Restriction d’usage – Limites
43 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.9 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.
11.9.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…).
11.9.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 nonconformité. Toutefois toutes les cartes valides produites avant cette date peuvent présenter
cette anomalie et la volumétrie est importante.
Tableau 41 : Caractéristique des certificats CPx à l’origine du problème constaté
11.9.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).
44 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.9.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.1 et 1.0.2
1.0.0r
1.0.1m et 1.0.2a
1.0.0p [8 Jan 2015]
1.0.1k [8 Jan 2015]
1.1.0dev (20/12/2014 commitée le
05/01/2015).
1.1.0
Tableau 42 : 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 43 : Extrait du changelog d’OpenSSL
45 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.9.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.
11.9.5.1 Mise à disposition
Mise à disposition Un patch pour OpenSSL est mis à disposition sur le site
http://integrateurs-cps.asipsante.fr/
Tableau 44 : Patch OpenSSL : Mise à disposition
11.9.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 45 : Patch OpenSSL : Application
11.9.5.3 Compilation
faire un ./config[ure] avec l’option -DOPENSSL_ASIP_NO_INVALID_BIT_STRING
Tableau 46 : Patch OpenSSL : Compilation
11.9.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 47 : Patch OpenSSL : Intérêts
11.9.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 48 : Patch OpenSSL : Mise à disposition
46 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
11.10
Utilisation de OpenSSL comme bibliothèque
11.10.1
Avertissement
05/10/2015
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 49 : Avertissement
11.10.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>
47 / 143
ASIP Santé
11.10.3
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
Exemples de code
11.10.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 50 : Exemple de fonction permettant le chargement du module PKCS#11
48 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.10.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;
}
49 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 51 : Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL
50 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
11.10.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");
51 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 52 : Exemple de fonction permettant la récupération d’une clé publique de la carte CPx
52 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12Utilisation d’OpenSSL en HTTPS au travers de
mod_ssl
12.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
Client
Navigateur
Cryptolib
CPS
HTTPS
(Authent.
Mutuelle)
Serveur Web (1)
Apache
OpenSSL
HTTPD
mod_ssl
Serveur Web (2)
NGinX
OpenSSL
http_ssl_
module
Figure 10 : Principe d’utilisation d’OpenSSL avec un serveur Web
53 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
12.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):
Porteur
Clé
Cléprivée
privéedu
duclient
client
asymétrique
asymétrique
Navigateur
Navigateur
Certificat client
Clé
Cléde
desession,
session,
secrète,
secrète,
symétrique
symétrique
Certificat serveur
Serveur
Serveur
Clé
Cléprivée
privéedu
duserveur
serveur
asymétrique
asymétrique
Clé
Cléde
desession,
session,
secrète,
secrète,
symétrique
symétrique
Demande de page 1
Ressource protégée
Handshake
Calcul crypto
Présentation challenge + certificat du serveur + liste certificats client acceptés
Vérification du certificat serveur et du challenge
Demande et saisie de code Porteur
Code porteur OK
Calcul crypto
Construction secret partagé
Réponse au challenge + certificat client
Vérification certificat client
et de la réponse au challenge
Construction secret partagé
Session
SSL
Réponse page 1
Chiffrement réponse 1
avec le secret partagé
Déchiffrement réponse 1
avec le secret partagé
Demande de page 2
Chiffrement réponse 2
avec le secret partagé
Réponse page 2
Déchiffrement réponse 2
avec le secret partagé
…
Fin de
session
SSL
Figure 11 : Principe de l’authentification mutuelle
54 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
12.3.1 Compétences requises
Les compétences techniques requises pour mener à bien le projet sont les suivantes :
Acteur
Composant
Compétences
Certificat SSL
Bi-clé RSA, certificat, chaines de certification, CRL, PKI
Connaissances Unix / Linux
Serveur
Apache HTTPD
Connaissances Apache HTTPD
Connaissances OpenSSL
Microsoft IIS
Connaissances Microsoft IIS
Page HTML
Poste
de
travail
Ergonomie
JavaScript
Cryptolib CPS
Porteur
Développements Web / Ajax / JavaScript avancés
Carte CPx
Installée. Manuel d’installation et d’utilisation de la Cryptolib CPS assimilé.
non expirées
non révoquées
non bloquée
code porteur connu
si possible : kit de cartes CPx de tests ASIP Santé
Tableau 53 : Prérequis
55 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
56 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
Authentification mutuelle
Phase
01 -Initialisation
Début
Kick off
No go
Go
- Expression de besoin
- Bibliographie
- Planning
Rédactions
02 - PoC
Démonstrateur (PoC)
Démo
- Bilan
Lesson learn
Projet
retenu
Non
Oui
03 - Développements
Rédactions
Non: nouveau projet
Projet existant ?
Authentification
mutuelle
03 - Intégration / Tests /
Acceptation
- Expression de besoin
- Conception / Architecture
- Planning
- Cahiers de tests
Développements des
fonctionnalités
Oui: authent. mutuelle
est une nouv. fct
Adaptation des
fonctionnalités
existantes
Intégration
Q&A
Qualité?
Non conforme
04 - Production
Conforme
Rédactions
- Manuel utilisateur
- DAT
- DEX
Fin
Figure 12 : Authentification mutuelle : un projet complet
57 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
12.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 54 : Brief project
58 / 143
12.4.2 Ressources
Sigle
MANAGEMENT_1
Rôle
Profil
Implication
Non chiffré
Chef de projet
Non chiffré
Technicien poste de travail Windows connaissant le
poste de travail Santé&Social
14 heures
Ingénieur Système connaissant Linux, pré sensibilisé
à la PKI et connaissant le batch.
45 heures
Teste unitairement ses développements.
Ingénieur Système connaissant Linux, Apache,
mod_ssl et la PKI
47 heures
Ouvre les flux entre poste client et serveur
Ingénieur réseau
03 heures
Donne son aval au projet
Collecte les différents documents d’architecture existants
Prend connaissance des documents
Ecrit l’expression de besoin
Ecrit le scénario de démonstration
PROJET_1
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
Teste unitairement ses installations.
Installe et configure la partie serveur Linux
INTEG_SERVER_1
Teste unitairement ses installations.
INTEG_SERVER_2
INTEG_NETWORK_1
Installe et configure la partie mod_ssl
Ecrit le plan de test fonctionnel
QA_1
Passe le plan de test
Non chiffré
Donne son aval pour la démonstration (qualité suffisante, adéquation avec l’expression
de besoin).
Tableau 55 : Ressources nécessaires
12.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 56 : Livrables « maquette authentification mutuelle »
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
12.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
Phase HTTP
La logique générale de l’implémentation d’un tel service est la suivante :
Installation
Configuration HTTP
Serveur:
Bi-clé / Certificat
ASIP Santé
« C4 / CSA »
Configuration
HTTPS
Certificats serveur
de production
Identification des
chaines de
certifications ASIP
Santé pertinentes
Configuration
authentification du
client par certificat
ASIP Santé
Conversion de
format
Récupération des
CRLs ASIP Santé
Configuration vérification des
CRLs ASIP Santé
Scripts de
conversion
Configuration récupération
régulières des CRLs ASIP Santé
Scripts de
récupération
automatique des
CRLs ASIP Santé
Gestion des CRLs ASIP Santé
Serveur:
Bi-clé Certificat PKI
interne
Authentification
du client
Par carte CPx
Phase
Authentification
du serveur (prod)
Serveur:
Bi-clé / Certificat
du marché
Authentification du client
Authentification du serveur
Configuration
HTTPS
Certificat serveur de
test
Autre
authentification du
client
Réseau
Authentification Mutuelle HTTPS
Phase
Authentification
du serveur (test)
Installation OpenSSL
Ouvertures des flux
Tests des flux
Figure 13 : Logique générale de l’implémentation de l’authentification mutuelle sur HTTPS
61 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
12.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 57 : Macro-planning « maquette authentification mutuelle »
62 / 143
Figure 14 : Macro planning
12.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 58 : 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é
05/10/2015
12.5 Configuration de OpenSSL sous Linux
12.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 59 : 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).
65 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.5.2 Privilèges
Les droits d'administrateur sur la machine sont nécessaires : si possible, se connecter en tant que
ROOT.
12.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.
12.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 60 : Environnement
66 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.5.5 Installation d'OpenSSL
12.5.5.1 Systèmes de référence
CentOS
Minimal a.b
a.b >= 6.5
Tableau 61 : Linux/OpenSSL : systèmes de référence
12.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 62 : OpenSSL : Archives de sources
12.5.5.3 Préparation
#
Etape
Description
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.
1
Identification
d’une version
préinstallée
2
Compilation et
installation
OpenSSL doit être installé à partir des sources.
depuis les sources
$ #commandes de test de présence d’OpenSSL sur le système :
$ yum list installed | grep openssl
$ which openssl
$ openssl version
$ find / -name "openssl"
Tableau 63 : OpenSSL : Installation
67 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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/.
Se placer dans le répertoire de travail et décompresser l'archive de sources :
3
$ 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/.
Se placer dans le répertoire des sources d'OpenSSL
4
$ cd ~/src/$ASIP_OPENSSL/
$
Lancer le script de configuration puis la compilation
5
$ # 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
Lancer le script de compilation
6
$ # 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...]
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
$
7
Vérifier l’installation
8
$ ls -al /usr/local/openssl/$ASIP_OPENSSL/*
$ /usr/local/openssl/$ASIP_OPENSSL/bin openssl version
Tableau 64 : OpenSSL : Compilation et installation
OpenSSL est installé et ses bibliothèques peuvent être utilisées par d'autres programmes.
68 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
12.5.6.1 Rappels SSL
Les échanges SSL se font en 4 phases :
#
1
Description
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
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-SHA256
AES256-GCM-SHA384
AES256-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES128-SHA256
AES128-GCM-SHA256
AES128-SHA256
Key
Version Exchang
e
TLSv1.2 Kx=ECDH
TLSv1.2 Kx=ECDH
TLSv1.2 Kx=DH
TLSv1.2 Kx=DH
TLSv1.2 Kx=RSA
TLSv1.2 Kx=RSA
TLSv1.2 Kx=ECDH
TLSv1.2 Kx=ECDH
TLSv1.2 Kx=DH
TLSv1.2 Kx=DH
TLSv1.2 Kx=RSA
TLSv1.2 Kx=RSA
Authen
tification
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Au=RSA
Chiffrement
Intégrité
Enc=AESGCM(256)
Enc=AES(256)
Enc=AESGCM(256)
Enc=AES(256)
Enc=AESGCM(256)
Enc=AES(256)
Enc=AESGCM(128)
Enc=AES(128)
Enc=AESGCM(128)
Enc=AES(128)
Enc=AESGCM(128)
Enc=AES(128)
Mac=AEAD
Mac=SHA384
Mac=AEAD
Mac=SHA256
Mac=AEAD
Mac=SHA256
Mac=AEAD
Mac=SHA256
Mac=AEAD
Mac=SHA256
Mac=AEAD
Mac=SHA256
Tableau 65 : OpenSSL : liste des cipher suites supportées en TLS 1.2 à base de RSA
69 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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/frfr/library/windows/desktop/aa374757%28v=vs.85%29.aspx)
ou
Mozilla/Firefox/NSS
(https://developer.mozilla.org/fr/docs/TLS_Cipher_Suite_Discovery).
70 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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+
71 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 66 : Cryptolib CPS : logs PKCS#11
12.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 ».
72 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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=pa
ckage: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 67 : 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 68 : OpenSSL : Code source des algorithmes en TLSv1.2
12.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.
73 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 69 : OpenSSL : Code source du ClientHello
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
74 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
12.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
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
3
Côté client, OpenSSL doit être utilisé pour avoir
l’erreur
4
A la version de SSL utilisée coté
client
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
6
A la longueur de la clé
d’authentification contenue dans la
carte CPS (1024b)
A l’utilisation des algorithmes SHA2
suivants :
 SHA384
 SHA512
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).
L’algorithme SHA2 « SHA256 » est bien
supporté
Tableau 70 : Activation TLS v1.2 : Paramètres à prendre en compte
75 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.5.6.7 Correction
Malgré cette limitation et en attendant la PFCNG (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 71 : 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.
76 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
12.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 72 : Linux/Apache HTTPD : systèmes de référence
12.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 73 : Apache : Archives de sources
12.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
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.
3
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) :
77 / 143
ASIP Santé
#
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
$
Lancer la compilation d'Apache
4
$ # utiliser make clean pour recompiler proprement
$ make
$
Installer l'application et les fichiers associés
5
$ 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/
Démarrer Apache
Le serveur Apache se lance via la ligne de commande suivante :
7
$ /usr/local/apache/$ASIP_HTTPD/bin/apachectl start
Le serveur doit démarrer sans encombre.
Arrêter Apache
8
Le serveur Apache s’arrête via la ligne de commande suivante :
$ /usr/local/apache/$ASIP_HTTPD/bin/apachectl stop
Tableau 74 : Apache : Compilation et installation
78 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
12.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.
79 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
12.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
2
Utiliser un bi-clé
d’authentification de serveur SSL
issu de la PKI de l’entreprise
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
Compter entre 200$ et 500$
(indicatif) selon le fournisseur, la
durée du certificat, les longueurs de
clé, les algorithmes utilisés…
3
Acheter et utiliser un bi-clé
d’authentification de serveur SSL
du marché
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 75 : Obtention d’un bi-clé pour l’authentification du serveur SSL
80 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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
# Chaine des autorités du certificat serveur
4
# 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 76 : 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.
81 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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.
82 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.8 Configuration de mod_ssl pour l’authentification du client
12.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
Pour activer l’authentification du client, le fichier de configuration Apache (httpd.conf ou
ssl.conf) doit aussi contenir les 2 lignes suivantes:
SSLVerifyClient require
4
1
2
# ou SSLVerifyClient optional
# dépend du besoin sur la connexion carte
# La valeur « 4 » tient compte de la hiérarchie de certification actuelle de l’ASIP Santé.
SSLVerifyDepth 4
Relancer le serveur :
5
 /usr/local/apache/$ASIP_HTTPD/bin/apachetcl startssl
 (service httpd restart)
pour prendre en compte les modifications.
Tableau 77 : Apache : Configuration de la chaine de confiance ASIP Santé et Activation de l’authentification par carte CPx
83 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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é.
84 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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
Cette étape d’activation des CRLs côté serveur reste valable avec
ASIP Santé avec la
la PFCNG
PFCNG
Tableau 78 : Gestion des CRLs ASIP Santé avec la PFCNG
12.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.
85 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 79 : Apache : Recommandations d’utilisation des CRLs ASIP Santé
12.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 80 : Apache : Configurations des CRLs
Relancer le serveur :


/usr/local/apache/$ASIP_HTTPD/bin/apachetcl startssl
(service httpd restart)
pour prendre en compte les modifications.
86 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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 81 : 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 les IGC de
Santé actuelles
Cet essai de connexion par carte CPx fonctionne directement.
Tableau 82 : Configuration des CRLs ASIP Santé avec la PFCNG
87 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.8.3.4 Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD 2.2
PFCNG
L’étape d’application du patch ASIP pour Apache 2.2 n’est plus
nécessaire avec la PFCNG.
Tableau 83 : PFCNG : 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.
88 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
Le mode opératoire est le suivant :
#
1
Description
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/.
Se placer dans le répertoire de travail
5
$ cd ~/src
$ # normalement la commande : tar -xvzf httpd-a.b.cc.tar.gz
$ # a déjà été faite précédemment
$
Appliquer le patch ASIP Santé pour Apache sur les sources d'Apache
6
$ cd ~/src/$ASIP_HTTPD/modules/ssl/
$ patch < ~/src/Patch_Va.b.cc.diff
$
Les lignes suivantes s’affichent :
7
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.
Recompiler Apache
8
$ # utiliser make clean avant make pour recompiler proprement
$ make
$
Réinstaller Apache
9
10
$ # installer l'application et les fichiers associés.
$ make install
[...défilement des messages d'exécution...]
$
Démarrer Apache
$/usr/local/apache/$ASIP_HTTPD/bin/apachetcl start
Tableau 84 : Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD
89 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
12.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=GIPCPS 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=GIPCPS 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=GIPCPS 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=GIPCPS 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=GIPCPS 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=GIPCPS 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
90 / 143
12.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 85 : IGC de santé actuelles, Apache 2.4 et NGinx: Pas de support de Apache 2.4 et de NGinx
PFCNG, Apache 2.4
et NGinx
Apache 2.4 et NGinx sont supportés par l’ASIP Santé avec la PFCNG (pas de spécificité de signature des CRLs).
Tableau 86 : PFCNG, Apache 2.4 et NGinx : support de Apache 2.4 et de NGinx avec la PFCNG
#
Directive
1
LoadModule
Description pour Apache 2.2
Description pour Apache 2.4
Chargement du module mod_ssl
Idem
Ex.: LoadModule ssl_module modules/mod_ssl.so
Adresses IP et Ports d’écoute du serveur HTTPS
2
Listen
Idem
Ex. : Listen 443
Méthode utilisée pour entrer le mot de passe pour les clés privées chiffrées
3
SSLPassPhraseDialog
Idem
Ex. : SSLPassPhraseDialog builtin
ASIP Santé
#
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Directive
Description pour Apache 2.2
Description pour Apache 2.4
Type du cache de session SSL global et inter-processus
4
SSLSessionCache
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)
Idem
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)
Nombre de secondes avant l'expiration d'une session SSL dans le cache de sessions
5
SSLSessionCacheTimeout
Idem
Ex. : SSLSessionCacheTimeout 300
Mécanisme de sémaphore à utiliser pour les exclusions mutuelles lors des opérations concurrentes
6
SSLMutex
Ex. : SSLMutex default
SSLMutex est obsolète.
Utiliser Mutex :
Ex. : Mutex sysvsem default
Source de déclenchement du Générateur de Nombres Pseudo-Aléatoires (PRNG)
6
SSLRandomSeed
7
SSLCryptoDevice
Ex. : SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
Idem
Moteur cryptographique OpenSSL
Idem
Ex.: SSLCryptoDevice builtin
Fichier de la clé privée du serveur (clé privée générée au moment de faire la demande de certificat)
8
SSLCertificateKeyFile
Ce fichier est sensible.
Idem
Cette clé peut être protégée par un mot de passe!
92 / 143
ASIP Santé
#
Directive
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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
Fichier contenant le certificat (clé publique + identité) correspondant à la clé privée du serveur (certificat acheté/reçu)
9
SSLCertificateFile
Ex : SSLCertificateFile /home/apache/certs/server.pem
SSLCertificateFile fusionne les 2 directives à
partir de Apache 2.4.8
Fichier contenant la chaine de certification du certificat serveur (les certificats root et intermédiaires de la chaine de certificats du
certificat serveur)
10
SSLCertificateChainFile
Ex. : SSLCertificateChainFile /home/apache/certs/rootca.pem
Ex. : SSLCertificateFile
/home/apache/certs/server.fullchain.pem
Fichier contenant la chaine de certification des certificats clients (concaténer les certificats de l’ASIP Santé au format PEM)
11
SSLCACertificateFile
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)
Idem
Ex.: SSLCACertificateFile /home/apache/certs/09-all-all.pem
Fichier contenant les listes de révocation émises par l’ASIP Santé
12
SSLCARevocationFile
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
93 / 143
ASIP Santé
#
Directive
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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
Active l’authentification SSL
14
SSLVerifyClient
Idem
Ex. : SSLVerifyClient require
Définit la profondeur de la chaîne de confiance
15
SSLVerifyDepth
Ex. :
# METTRE « 4 » pour tenir compte de la profondeur des chaines de certification ASIP Santé
SSLVerifyDepth 4
Idem
La valeur par défaut est:
SSLProtocol all
16
SSLProtocol
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.
Idem
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)
Ex. : SSLProtocol All -SSLv2
94 / 143
ASIP Santé
#
Directive
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Description pour Apache 2.2
Description pour Apache 2.4
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
17
SSLCipherSuite
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 d’avril 2014, d’adopter la valeur suivante pour cette directive (non testé, à intégrer soigneusement):
Idem
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSAAES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSAAES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK
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é !)
18
SSLOptions
Idem
Ex. : SSLOptions +StdEnvVars
Nécessaire pour Mac OS X / Safari : SSLOptions +OptRenegotiate
19
LogLevel warn
Valeur de production
LogLevel debug
Valeur de debugging, à utiliser en conjonction avec la directive ErrorLog
LogLevel
Idem
95 / 143
ASIP Santé
#
Directive
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Description pour Apache 2.2
Description pour Apache 2.4
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
Force le « Connection: close » dans la réponse Apache même si le client est en HTTP/1.1 avec « Connection: keep-alive »
20
KeepAlive
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.
Idem
Ex. : KeepAlive on
A « tuner » selon l’application. Element important pour les performances.
21
KeepAliveTimeout
Idem
Ex. : KeepAliveTimeout 15
Nécessaire pour que le serveur puisse vérifier la validité des certificats client présentés par les clients au serveur
22
Patch ASIP Santé pour
Apache/mod_ssl
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).
N/A
Tableau 87 : Apache : Directives Apache HTTPD / mod_ssl
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)
96 / 143
13Annexe – 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.
13.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.
13.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 88 : 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é
05/10/2015
13.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 89 : Microsoft IIS 7 : Configuration
98 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
13.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 90 : Microsoft IIS 7 : Configuration des autorités clientes acceptées
Figure 18 : Microsoft IIS 7 : Configuration des autorités clientes acceptées
99 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
#
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 91 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client
Figure 19 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client
100 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
14Annexe – 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 du kit CPS est http://integrateurs-cps.asipsante.fr/fichiers/ASIPBCKIT022015.doc distribué par le site integrateurs-cps de l’ASIP Santé (section « Catalogue
commercial et bons de commande »).
Il est nécessaire de remplir ce bon avec les bons contacts et la bonne adresse de livraison.
15Annexe – 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 Classe 4 « serveur / CSA – Certificat Serveur Applicatif » ASIP Santé
3. Soit d’un certificat serveur émis par une PKI interne
15.1 Certificats du « Commerce » ou issus d’une PKI interne
Il est faisable techniquement 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
15.2 Certificats Serveur ASIP Santé – « CSA – Classe 4 »
Il est possible d’authentifier des porteurs de cartes CPx tout en ayant des certificats « Classe 4 /
serveur / CSA – Certificat Serveur Applicatif » 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.
15.2.1 « CSA – Classe 4 » de test
Les générations de certificats « CSA - Classe 4 » de tests et leurs utilisations en test ne posent pas de
souci particulier : elles peuvent être faites avec les cartes du kit de test
La fiche de demande de certificats serveur de tests « CSA - classe 4 » est Formulaire-demandeCSAtest_v5.0_03-2015.doc, distribuée par le site integrateurs-cps de l’ASIP Santé (section
« Catalogue commercial et bons de commande »). Il est nécessaire de la remplir avec les bons noms
de domaine.
101 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
15.2.2 « CSA – Classe 4 » de production
Par contre, pour la production, la génération d’un certificat « CSA - Classe 4 » à 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
o les porteurs devant être déclarés en tant qu’administrateurs techniques pour les
domaines que l’on souhaite exploiter
via l’utilisation de l’outil CleoCPS
la documentation technique concernant les « CSA – Classe 4 » se trouve à l’adresse
o http://integrateurs-cps.asipsante.fr/pages/Certificats-SSLSMIME-de-lASIPSant%C3%A9
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 « CSA – Classe 4 » (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 « CSA – Classe 4 » se trouve à cette adresse:
http://esante.gouv.fr/sites/default/files/PC_appli_V1.3.pdf
conseil
Commander des certificats classe 4 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 »
15.2.3 CleoCPS
Les certificats serveur SSL ASIP Santé « CSA - Classe 4 » s’obtiennent à l’aide de l’outil CleoCPS, mis à
disposition librement et gratuitement par l’ASIP santé :
http://integrateurs-cps.asipsante.fr/pages/CleoCPS
Cet outil est disponible uniquement sous Windows.
Il est exhaustivement documenté par « ASIP_manuel_certificats_serveur_CleoCPS-V-X-X-X.pdf »
fourni avec l’outil.
CleoCPS est un outil graphique qui permet d’obtenir de manière simple un certificat serveur SSL ASIP
Santé « CSA - Classe 4 » en automatisant les différentes phases :
 génération des clés
 création de la demande de certificat
 envoi à la plateforme d’inscription
 réception
102 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
15.2.4 Configuration des postes clients se connectant vers un serveur présentant un
certificat « CSA - Classe 4 » 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 de l’ASIP Santé ou que le client installe la chaine de certificats Classe 4 dans son navigateur pour
faire confiance au serveur présentant un certificat « CSA - Classe 4 » ASIP Santé.
Cette opération peut être implémentée spécifiquement via des installeurs des seules chaines de
certificats Classe 4 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 Classe 4 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
o se pose en parallèle le problème de la diffusion des msi, dmg et rpm de la
Cryptolib CPS pour installation par le client
 L’outil de diagnostic et d’installation (ODI) de l’ASIP Santé le fait
 http://www.outil-diagnostic.asipsante.fr/
 ODI installe la Cryptolib CPS et le GALSS
 Confusion potentielle identique au cas précédent
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 Classe 4 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à l’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é.
103 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16Annexe – 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
104 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.1 Expression du besoin
L’implémentation d’une authentification mutuelle par carte CPx doit être identifiée comme un sousprojet à 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
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)
Besoin exprimé par le projet
(ex. « oui », « non »,
« prioritaire »…)
Authentification du client par
certificat logiciel seulement
Log in (connexion de l’utilisateur à
l’application)
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 »)
Evénements
Lecteur (branchement,
débranchement)
Gestion applicative des
événements sur le poste de travail
Evénements
Carte (insertion, arrachage)
Evénements magasin
(montée/descente des certificats dans
le magasin utilisé notamment par les
navigateurs Web)
105 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Aspect de mise en œuvre dans
l’application
Détails
05/10/2015
Besoin exprimé par le projet
(ex. « oui », « non »,
« prioritaire »…)
Le standard SSL ne préconisent rien
Vérification de la disponibilité de la sur la présence de la {clef privée ;
3
clef privée de la carte
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…)
Authent. serveur
Authentification
Authent. client
Authent. Mutuelle
Never (pas de log-off)
On-demand (déconnexion à la
demande de l’utilisateur)
Log off (déconnexion)
Timeout (déconnexion sur détection
d’inactivité)
Arrachage carte CPx (déconnexion sur
arrachage carte)
Tableau 92 : 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}
106 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
16.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 sousprojet à 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-on (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.
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
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
Mode de détection
Mode automatique
activé
Indépendant de
l’état de recherche
du CCM
TLS (HTTPS)
TLS (HTTPS)
Aspect de mise en œuvre
dans l’application
Log in (connexion de
l’utilisateur à
l’application)
Configuration de
l’utilitaire CCM
recommandée
Protocole de transport
Détails
Besoin (à
remplir)
107 / 143
ASIP Santé
Aspect de mise en œuvre
dans l’application
Détails
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
Gestion applicative des
événements sur le poste
de travail
Vérification de la
disponibilité de la clef
4
privée de la carte
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)
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é
Ensemble des
actions à effectuer
Configuration du poste de sur le poste de
travail
travail pour le
rendre
opérationnel
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)
Oui
Oui
Oui (erreurs HTTP
uniquement)
Oui pour tous les
cas d’erreurs
Non
Temps réel
Non
Temps réel
Non
Temps réel
Non
Oui
Complexe (GALSS +
Cryptolib CPS)
Plus complexe car
composant
spécifique
Authent. client
Forte (sans gestion
de tous les
évènements)
Plus complexe car
composant
spécifique
Forte (gestion
possible de tous les
évènements)
Authent. serveur
Oui (TLS)
Oui, paramétrable
Architecture serveur
Authentification
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
4
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}
108 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
Aspect de mise en œuvre
dans l’application
Détails
Besoin (à
remplir)
Authentification et
login CPx
navigateur, sans
add-on
Authent. Mutuelle
Oui (TLS)
Never
On-demand
Timeout
Oui
Oui
Oui
Arrachage carte
CPx
Gestion difficile,
dépend du
navigateur
Log off (déconnexion)
Autre type
d’application
utilisant
l’authentification
CPx (client lourd
connecté ou
navigateur avec
add-on)
Possible (End to
end), dépend des
composants
Oui
Oui
Oui
Oui
Tableau 93 : 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.
109 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.3 Exemple d’application Web exploitant la CPx sous
Microsoft Windows
16.3.1 Microsoft Internet Explorer
16.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
110 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
111 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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é.
112 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
113 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
114 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
115 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
116 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
On re-rentre dans le service :
Figure 27 : Windows : IE : Déconnexion sans arrachage carte : reconnexion au service
117 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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.
118 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
119 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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.
Attente chargement du certificat en magasin nécessaire
Insertion carte tardive
Demande de sélection de certificat OK
Demande insertion code porteur OK
Connexion au service protégé OK
Tableau 94 : 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 95 : Remarque PoC
120 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.3.2 Mozilla Firefox
Le PoC doit porter sur tous les types de navigateurs visés par l’application finale.
16.3.2.1 Configuration
#
Solution
0002
La même configuration serveur Apache et des pages HTML que pour IE est utilisée.
Tableau 96 : Windows 7 / Mozilla Firefox : Configuration
16.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 97 : Windows 7 / Mozilla Firefox : Résultats
121 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.3.3 Google Chrome
16.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 98 : Windows 7 / Google Chrome: Configuration
16.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
OK
Insertion tardive
sauf si une tentative de connexion a été faite préalablement
sans carte avec l’instance de Chrome courante
Tableau 99 : 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 100 : Windows 7 / Google Chrome : Remarques
122 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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.
16.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 101 : Mac OS X / Safari : Remarques
16.4.2 Mozilla Firefox
16.4.2.1 Présentation du résultat obtenu
Figure 31 : Mac OS X : Mozilla Firefox : Version utilisée
123 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
124 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
125 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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 102 : Mac OS X / Mozilla Firefox : Résultats
126 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.4.3 Google Chrome
16.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
127 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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
128 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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
OK
Insertion tardive
sauf si une tentative de connexion a été faite préalablement
sans carte avec l’instance de Chrome courante
Tableau 103 : 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 104 : Mac OS X / Google Chrome: Remarques
129 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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.
16.5.1 Configuration Apache 1
Elle se résume à :


1 Virtualhost https
Des Location :
o SSLVerifyClient
o SSLVerifyClient
o SSLVerifyClient
pour la page d’accueil et la demande d’insertion carte
optional pour la sélection du certificat
require pour les pages de services
none
130 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
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 105 : Apache : Configuration Apache 1
131 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.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.
16.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).
132 / 143
ASIP Santé
05/10/2015
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
16.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
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.
Configuration adéquate des
VirtualHost et des Location
Apache
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
Cacher les ressources statiques (.js, .css,
.jpg…)
Serveur
Configuration du cache des pages
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
133 / 143
ASIP Santé
Acteur
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
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
# 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]
Parcours guide, CSS, machine à état
(parcours)
Cf. snapshots plus haut
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) {
}
}
Client
Javascript
RewriteEngine On
Etablir la liste des « best practices » et
standards retenus pour la conception du
frontal pour partage au travers du document
de conception.
Page HTML
Ergonomie
05/10/2015
Tableau 106 : Apache : Documentation de la configuration Apache utilisée
134 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.5.5 Reste à faire sur la configuration Apache utilisée (configuration Apache 1)
Acteur
Composant
Reste à faire par rapport à une application de production existante
Performances, accès concurrentiels, montée en charge et sécurité à qualifier
Serveur
Apache
Utilisation de redirections client (flickering, bookmarkage possible de pages
intermédiaires) à surveiller
Page HTML
Pages existantes à auditer. Rapide si :
 pages peu nombreuses
 guideline de best practices clair déjà établi / dossier de conception à
jour
Nécessité de faire des choses spécifiques par type de navigateur
Ergonomie
Pages intermédiaires / message à créer
window.crypto.logout(); est spécifique à Firefox.
document.execCommand("ClearAuthenticationCache","false"); est spécifique à
IE
Aucune méthode équivalente n’existe sous Chrome.
Client
JavaScript
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 107 : Apache : Remarques sur la configuration utilisée
135 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
16.5.6 Configurations utilisées en configuration Apache 1
16.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 108 : Client : Configurations utilisées
16.5.6.2 Serveurs
Frontal Web
OS
CentOS 6.5 64b
Apache
2.2.15
OpenSSL
1.0.1e-fips 11 Feb 2013
Tableau 109 : Serveurs : Configurations utilisées
136 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
17Annexe – 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 110 : Apache : Messages d’erreur
137 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
18Annexe – Liste des tables
Tableau 1 : Glossaire ............................................................................................................................... 8
Tableau 2 : Entreprises citées.................................................................................................................. 9
Tableau 3 : Avertissements ................................................................................................................... 10
Tableau 4 : Prérequis ............................................................................................................................. 11
Tableau 5 : PFCNG : Simplification de la vérification de statut de certificat ......................................... 18
Tableau 6 : PFCNG : Indications présentées dans le présent document valides .................................. 18
Tableau 7 : OpenSSL : vérification de la version courante .................................................................... 19
Tableau 8 : DER versus PEM .................................................................................................................. 19
Tableau 9 : OpenSSL : Conversion d’un certificat ou d’une CRL du format DER vers PEM ................... 20
Tableau 10 : OpenSSL et CRL ASIP Santé : premier essai ...................................................................... 21
Tableau 11 : OpenSSL et CRL ASIP Santé : résultat du premier essai .................................................... 21
Tableau 12 : Principe de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché .................. 22
Tableau 13 : Ligne de commande de vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché
............................................................................................................................................................... 23
Tableau 14 : Résultats de la vérification des CRL ASIP Santé avec OpenSSL 1.0.1 non patché ............ 23
Tableau 15 : Points vérifiés par le « OpenSSL verify crl_check » sur un certificat final ........................ 24
Tableau 16 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1
non patché............................................................................................................................................. 25
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é..................................................................................................................... 25
Tableau 18 : Ligne de commande de vérification des CRLs ASIP Santé en chaîne avec OpenSSL 1.0.1
patché .................................................................................................................................................... 27
Tableau 19 : Authentification simple du serveur .................................................................................. 28
Tableau 20 : Authentification mutuelle avec un certificat client logiciel .............................................. 28
Tableau 21 : Consommation du flux HTTP ............................................................................................ 28
Tableau 22 : Manuel d’installation et d’utilisation de la Cryptolib CPS ................................................ 30
Tableau 23 : chargement de engine_pkcs11 sous Windows ................................................................ 32
Tableau 24 : chargement de engine_pkcs11 sous Linux ....................................................................... 32
Tableau 25 : chargement de engine_pkcs11 sous Mac OS X ................................................................ 32
Tableau 26 : Options utilisées ............................................................................................................... 33
Tableau 27 : fichier openssl.cfg ............................................................................................................. 33
Tableau 28 : Vérification du chargement de engine_pkcs11 ................................................................ 34
Tableau 29 : liste de fonctions pouvant utiliser un moteur pkcs#11 en argument .............................. 35
Tableau 30 : Paramètres d’utilisation du moteur PKCS#11 .................................................................. 36
Tableau 31 : Liste des identifiants de clé .............................................................................................. 36
Tableau 32 : OpenSSL : req .................................................................................................................... 37
Tableau 33 : OpenSSL : smime .............................................................................................................. 38
Tableau 34 : OpenSSL : rand .................................................................................................................. 38
Tableau 35 : OpenSSL : s_client ............................................................................................................. 39
Tableau 36 : OpenSSL : dgst .................................................................................................................. 40
Tableau 37 : OpenSSL : speed ............................................................................................................... 40
Tableau 38 : OpenSSL : x509 ................................................................................................................. 41
Tableau 39 : Utilisation du moteur PKCS#11 OpenSC pour OpenSSL en sans-contact ......................... 42
Tableau 40 : Restriction d’usage – Limites ............................................................................................ 43
Tableau 41 : Caractéristique des certificats CPx à l’origine du problème constaté .............................. 44
Tableau 42 : Versions d’OpenSSL concernées ....................................................................................... 45
Tableau 43 : Extrait du changelog d’OpenSSL ....................................................................................... 45
Tableau 44 : Patch OpenSSL : Mise à disposition .................................................................................. 46
Tableau 45 : Patch OpenSSL : Application ............................................................................................. 46
138 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
Tableau 46 : Patch OpenSSL : Compilation............................................................................................ 46
Tableau 47 : Patch OpenSSL : Intérêts................................................................................................... 46
Tableau 48 : Patch OpenSSL : Mise à disposition .................................................................................. 46
Tableau 49 : Avertissement ................................................................................................................... 47
Tableau 50 : Exemple de fonction permettant le chargement du module PKCS#11 ............................ 48
Tableau 51 : Exemple de fonction générique permettant de charger n’importe quel moteur OpenSSL
............................................................................................................................................................... 50
Tableau 52 : Exemple de fonction permettant la récupération d’une clé publique de la carte CPx .... 52
Tableau 53 : Prérequis ........................................................................................................................... 55
Tableau 54 : Brief project ...................................................................................................................... 58
Tableau 55 : Ressources nécessaires..................................................................................................... 59
Tableau 56 : Livrables « maquette authentification mutuelle » ........................................................... 60
Tableau 57 : Macro-planning « maquette authentification mutuelle »................................................ 62
Tableau 58 : Remarques « maquette de Smartcard logon avec une carte CPx » ................................. 64
Tableau 59 : Apache : Outils nécessaires à l'application du patch et à la compilation ......................... 65
Tableau 60 : Environnement ................................................................................................................. 66
Tableau 61 : Linux/OpenSSL : systèmes de référence........................................................................... 67
Tableau 62 : OpenSSL : Archives de sources ......................................................................................... 67
Tableau 63 : OpenSSL : Installation ....................................................................................................... 67
Tableau 64 : OpenSSL : Compilation et installation .............................................................................. 68
Tableau 65 : OpenSSL : liste des cipher suites supportées en TLS 1.2 à base de RSA ........................... 69
Tableau 66 : Cryptolib CPS : logs PKCS#11 ............................................................................................ 72
Tableau 67 : Google Chrome : Code source de BoringSSL .................................................................... 73
Tableau 68 : OpenSSL : Code source des algorithmes en TLSv1.2 ........................................................ 73
Tableau 69 : OpenSSL : Code source du ClientHello ............................................................................. 74
Tableau 70 : Activation TLS v1.2 : Paramètres à prendre en compte ................................................... 75
Tableau 71 : Contournement serveur ................................................................................................... 76
Tableau 72 : Linux/Apache HTTPD : systèmes de référence ................................................................. 77
Tableau 73 : Apache : Archives de sources ........................................................................................... 77
Tableau 74 : Apache : Compilation et installation ................................................................................ 78
Tableau 75 : Obtention d’un bi-clé pour l’authentification du serveur SSL .......................................... 80
Tableau 76 : Apache : Configuration du certificat SSL serveur ............................................................. 81
Tableau 77 : Apache : Configuration de la chaine de confiance ASIP Santé et Activation de
l’authentification par carte CPx ............................................................................................................. 83
Tableau 78 : Gestion des CRLs ASIP Santé avec la PFCNG..................................................................... 85
Tableau 79 : Apache : Recommandations d’utilisation des CRLs ASIP Santé ........................................ 86
Tableau 80 : Apache : Configurations des CRLs..................................................................................... 86
Tableau 81 : Configuration des CRLs ASIP Santé avec les IGC de Santé actuelles ................................ 87
Tableau 82 : Configuration des CRLs ASIP Santé avec la PFCNG ........................................................... 87
Tableau 83 : PFCNG : Pas d’installation du patch ASIP Santé pour Apache HTTPD 2.2 ........................ 88
Tableau 84 : Apache HTTPD 2.2 : Installation du patch ASIP Santé pour Apache HTTPD ..................... 89
Tableau 85 : IGC de santé actuelles, Apache 2.4 et NGinx: Pas de support de Apache 2.4 et de NGinx
............................................................................................................................................................... 91
Tableau 86 : PFCNG, Apache 2.4 et NGinx : support de Apache 2.4 et de NGinx avec la PFCNG ......... 91
Tableau 87 : Apache : Directives Apache HTTPD / mod_ssl .................................................................. 96
Tableau 88 : Microsoft IIS 5 : Configuration .......................................................................................... 97
Tableau 89 : Microsoft IIS 7 : Configuration .......................................................................................... 98
Tableau 90 : Microsoft IIS 7 : Configuration des autorités clientes acceptées ..................................... 99
Tableau 91 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client ............. 100
Tableau 92 : Authentification mutuelle par carte CPx : Expression du besoin ................................... 106
Tableau 93 : Authentification mutuelle par carte CPx : Expression du besoin ................................... 109
Tableau 94 : Windows 7 / Internet Explorer : Résultats ..................................................................... 120
139 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
Tableau 95 : Remarque PoC ................................................................................................................ 120
Tableau 96 : Windows 7 / Mozilla Firefox : Configuration .................................................................. 121
Tableau 97 : Windows 7 / Mozilla Firefox : Résultats ......................................................................... 121
Tableau 98 : Windows 7 / Google Chrome: Configuration ................................................................. 122
Tableau 99 : Windows 7 / Google Chrome : Résultats ........................................................................ 122
Tableau 100 : Windows 7 / Google Chrome : Remarques .................................................................. 122
Tableau 101 : Mac OS X / Safari : Remarques ..................................................................................... 123
Tableau 102 : Mac OS X / Mozilla Firefox : Résultats .......................................................................... 126
Tableau 103 : Mac OS X / Google Chrome: Résultats ......................................................................... 129
Tableau 104 : Mac OS X / Google Chrome: Remarques ...................................................................... 129
Tableau 105 : Apache : Configuration Apache 1 ................................................................................. 131
Tableau 106 : Apache : Documentation de la configuration Apache utilisée ..................................... 134
Tableau 107 : Apache : Remarques sur la configuration utilisée ........................................................ 135
Tableau 108 : Client : Configurations utilisées .................................................................................... 136
Tableau 109 : Serveurs : Configurations utilisées ............................................................................... 136
Tableau 110 : Apache : Messages d’erreur ......................................................................................... 137
140 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
19Annexe – Liste des figures
Figure 1 : Signature de certificats .......................................................................................................... 13
Figure 2 : Signature de CRLs .................................................................................................................. 13
Figure 3 : Signature de certificats et de CRLs ........................................................................................ 13
Figure 4 : Légende ................................................................................................................................. 15
Figure 5 : Vérification des CRLs Classe 4 ASIP Santé ............................................................................. 16
Figure 6 : Vérification des CRLs Classe 0, 1, 2 et 3 ASIP Santé .............................................................. 17
Figure 7 : Vérification des CRLs ASIP Santé avec la PFCNG ................................................................... 18
Figure 8 : Root CA ASIP Santé au format DER ....................................................................................... 19
Figure 9 : Root CA ASIP Santé au format PEM....................................................................................... 19
Figure 10 : Principe d’utilisation d’OpenSSL avec un serveur Web ....................................................... 53
Figure 11 : Principe de l’authentification mutuelle ............................................................................... 54
Figure 12 : Authentification mutuelle : un projet complet ................................................................... 57
Figure 13 : Logique générale de l’implémentation de l’authentification mutuelle sur HTTPS ............. 61
Figure 14 : Macro planning.................................................................................................................... 63
Figure 15: Erreur d'authentification par CPx sous Mac OS X / Chrome 39+ ......................................... 71
Figure 16 : Thawte: SSL Toolbox ............................................................................................................ 82
Figure 17 : Symantec: SSL Toolbox ........................................................................................................ 82
Figure 18 : Microsoft IIS 7 : Configuration des autorités clientes acceptées ........................................ 99
Figure 19 : Microsoft IIS 7 : Activation de l’authentification mutuelle par certificat client ................ 100
Figure 20 : Windows : IE : Connexion sur la page d’accueil ................................................................ 110
Figure 21 : Windows : IE : Insertion carte ........................................................................................... 111
Figure 22 : Windows : IE : Sélection certificat ..................................................................................... 112
Figure 23 : Windows : IE : Saisie code porteur .................................................................................... 113
Figure 24 : Windows : IE : Page de service .......................................................................................... 114
Figure 25 : Windows : IE : Déconnexion sans arrachage carte : retour à la page d’accueil ................ 115
Figure 26 : Windows : IE : Déconnexion sans arrachage carte : re-sélection du certificat, pas de code
porteur ................................................................................................................................................ 116
Figure 27 : Windows : IE : Déconnexion sans arrachage carte : reconnexion au service ................... 117
Figure 28 : Windows : IE : Pas de déconnexion + Arrachage carte + F5 sur la page de service .......... 118
Figure 29 : Windows : IE : Attente de chargement de certificat ......................................................... 119
Figure 30 : Windows : IE : Bouton inactif pendant l’attente de chargement du certificat ................. 119
Figure 31 : Mac OS X : Mozilla Firefox : Version utilisée ..................................................................... 123
Figure 32 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 124
Figure 33 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 124
Figure 34 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 125
Figure 35 : Mac OS X : Mozilla Firefox : Connexion sur la page d’accueil ........................................... 125
Figure 36 : Mac OS X : Mozilla Firefox : Connexion sur la page protégée de service.......................... 125
Figure 37 : Mac OS X : Google Chrome : Version utilisée .................................................................... 127
Figure 38 : Mac OS X : Google Chrome : Connexion à la page d’accueil ............................................. 127
Figure 39 : Mac OS X: Google Chrome : Insertion carte ...................................................................... 128
Figure 40 : Mac OS X : Google Chrome : Sélection du certificat ......................................................... 128
Figure 41 : Mac OS X : Google Chrome : Saisie du code porteur ........................................................ 128
141 / 143
ASIP Santé
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les produits de certification de l'ASIP Santé
05/10/2015
20Notes
[fin du document]
142 / 143

Documents pareils

Apache 2.0.x / Windows - MOD SSL - Club d - LabSciNet

Apache 2.0.x / Windows - MOD SSL - Club d - LabSciNet C'est un bon casse tête que d'installer mod_ssl sur un serveur Apache 2.0.x sur Windows, quel source choisir ? Comment faire ? Est ce que ça marche vraiment ? Tout au long de ce tutoriel vous allez...

Plus en détail

Licences Tierces

Licences Tierces basiques de cryptographie et fournissent un certain nombre de fonctions utiles autour de la cryptographie – licence de type BSD. * OpenVPN (http://openvpn.net/) - OpenVPN permet à des pairs de s'au...

Plus en détail