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
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...
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...