Addendum au document «Les certificats X.509 et les CRLs des cartes CPS2ter du Système CPS» Statut : Note validée Date mise à jour : 7 novembre 2007 Référence : ASIP_ExtensionX.509_note V2.doc Documents liés : ASIP_IdentifiantRPPS_note_v9.doc Les certificats X.509 et les CRLs des cartes CPS2ter du Système CPS Auteur(s) * : ASIP/PSCC : Service Poste & Carte Correcteur(s) * : ASIP/PRAS. Valideur(s) * : N/A (*) Nom et fonction Diffusion (libre, restreinte, confidentielle) : LIBRE Liste de diffusion : - Rendu public sur le site éditeurs/cps - Editeurs & Promoteurs - ASIP Agence des Systèmes d Information Partagés de Santé
Evolution des extensions CPS pour le RPPS Introduction sur le projet RPPS Le projet RPPS (Répertoire Partagé des Professionnels de Santé) est un projet national placé sou l égide de l Etat, dont la mise en œuvre est confiée à l ASIP SANTÉ, avec la participation du Ministère de la Santé, du Service de Santé des Armées (SSA), des Ordres professionnels et de la CNAMTS. Jusqu à la mise en fonctionnement du RPPS, les professionnels de santé (PS) continueront à être identifiés par un n ADELI attribué par les DDASS 1. A partir de la mise en fonctionnement du RPPS, tout nouvel inscrit à l Ordre sera identifié par un n RPPS. Les professionnels déjà en exercice se verront également attribuer un numéro RPPS qui leur sera communiqué par les Ordres. Impacts du projet RPPS sur le système CPS La diffusion de l identifiant RPPS aura pour corollaire la diffusion d une table de correspondance entre le dernier numéro ADELI du professionnel et le numéro RPPS qui lui sera affecté et mise à disposition par l ASIP SANTÉ. Pour chaque profession qui s inscrit dans le programme de ce répertoire, les nouveaux inscrits se verront dotés d une carte CPS porteuse de l identifiant RPPS. Par ailleurs, les cartes portant l identifiant ADELI seront renouvelées à échéance ou de façon anticipée, par une carte portant l identifiant RPPS 2. Pour assurer la correspondance entre l ancienne identification ADELI et RPPS, une extension de données dans le certificat permet d y intégrer le dernier identifiant ADELI. La suite de ce document décrit les extensions du certificat CPS et détaille au travers d exemples comment effectuer la relation entre les deux certificats. Le schéma de l annuaire CPS évolue également pour réaliser la correspondance à partir de la fiche personne de l annuaire. Des recherches LDAP sur l ancien ADELI seront alors possibles et des exemples de requêtes sont proposés dans un document ad-hoc. 1 Direction Départementale des Affaires Sanitaires et Sociales 2 Le document Gipcps_IdentifiantRPPS cité en introduction décrit dans le détail l identification RPPS et la structure des données correspondantes. Référence : ASIP_ExtensionX.509_note V2.doc Page 2/9
Les extensions des certificats CPS L ASIP Santé est l autorité de certification, reconnue dans le Secteur Santé, de certification des clés publiques d authentification, de signature et de confidentialité. Les certificats qu il délivre sont conformes à la norme X.509-v3. Un certificat X.509-v3 contient un numéro unique, des données d identification de son porteur (subject) et de son émetteur (issuer), la clé publique, et un ensemble variable d informations complémentaires placées dans des extensions. Il existe des extensions «standard», au sens où elles sont reconnues par l ensemble des produits exploitant les certificats X.509. Mais un émetteur de certificat a la possibilité d ajouter des extensions privées qui ne seront évidement reconnues et traitées que par des applications spécialisées. Ce document décrit les extensions des certificats CPS des certificats X.509 v3 du système CPS. Le lecteur y trouvera les 2 extensions (gipoldidnatps et gipspecialiterpps) liées à la mise en œuvre du RPPS. Format général d un certificat X.509 Un certificat X.509 est un constitué d une suite continue d informations présentées suivant un schéma ASN.1 de structure TLV (Tag, Length, Value), une Value pouvant elle-même contenir d autres TLV : Certificate ::= SEQUENCE { TbsCertificate TBSCertificate, SignatureAlgorithm AlgorithmIdentifier, SignatureValue BIT STRING } tbscertificate ::= SEQUENCE { version [0] Version (v3), serialnumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectpublickeyinfo SubjectPublicKeyInfo, extensions [3] Extensions } Référence : ASIP_ExtensionX.509_note V2.doc Page 3/9
Format général d une extension Les extensions sont regroupées (TAG [3] = 0xA3) et chacune présente : un identifiant de l extension (OID = Object IDentifier) permettant de la reconnaître ; optionnellement un indicateur de criticité de cette extension ; la valeur effective de cette extension. Extensions ::= SEQUENCE OF Extension Extension ::= SEQUENCE { extnid OBJECT IDENTIFIER, critical BOOLEAN, (default = FALSE) extnvalue OCTET STRING } Les identifiants d objet (OID) des extensions privées CPS Ces OID sont organisés au niveau international sous la forme d un arbre. Chaque pays ou organisation (telle que la France ou l ISO) se voit attribuer une branche. Un identifiant est attribué définitivement et peut identifier n importe quel type d objet. Le GIP-CPS s est fait attribuer par l AFNOR l identifiant 1.2.250.1.71 (en hexadécimal : 2A 81 7A 01 47) et peut donc affecter des identifiants sous sa branche aux objets de son choix. Object de l Extension Valeur de l OID (en hexadécimal) gipcardid 2A 81 7A 01 47 01 02 03 gipcardcategory 2A 81 7A 01 47 01 02 05 gipcardtype 2A 81 7A 01 47 01 02 02 gipprofessioncode 2A 81 7A 01 47 01 02 07 gipfutureprofessioncode 2A 81 7A 01 47 01 02 08 gipoldidnatps (*) 2A 81 7A 01 47 04 02 03 gipspecialiterpps (*) 2A 81 7A 01 47 04 02 05 (*) ces 2 extensions sont liées au RPPS Référence : ASIP_ExtensionX.509_note V2.doc Page 4/9
Extensions privées spécifiques RPPS utilisées dans les Certificats X.509 du système CPS Ces extensions sont optionnelles et il n y a pas d extension avec la valeur nulle. Ces extensions sont non critiques par défaut. gipoldidnatps (optionnelle) Cette extension est présente uniquement lorsque l attribut CN= «id-nat-ps» du DN subject est renseigné avec une identité RPPS et qu il existe un format antérieur «id-nat-ps» de l identifiant du porteur. GipOldIDNatPS ::= PrintableString Valeurs définies dans la table G08 de DICO-FR.GIP 1er caractère : type d identifiant caractères suivants : valeur gipspecialiterpps (optionnelle) Cette extension est présente uniquement si le porteur PS arbore au moins une spécialité RPPS, et elle contient l ensemble de ces spécialités RPPS. gipspecialiterpps ::= SEQUENCE SIZE (1.MAX) OF SpecialiteRPPS SpecialiteRPPS ::= UTF8String Exemples de mise en œuvre <To Do David D.> Règles de gestion de référencement des qualifications de spécialités médicales <To Do Serge R. et WI> Quelles professions Quelles règles de gestion Ordre des qualifications Autres extensions privées utilisées dans les Certificats X.509 du Système CPS Certaines de ces extensions sont optionnelles et il n y a pas d extension avec la valeur nulle. Ces extensions sont non critiques par défaut. gipcardid Cette extension, toujours présente, contient l'identification de l'émetteur de la carte et le numéro de série de la carte. Référence : ASIP_ExtensionX.509_note V2.doc Page 5/9
GipCardID ::= PrintableString Format : "8025000001/9999999999" gipcardcategory Cette extension, toujours présente, contient la catégorie de la carte (Carte de Professionnel de Santé, Carte Patient-Assuré, Module de Sécurité). GipCardCategory ::= OctetString Valeurs définies dans la table G01 de DICO-FR.GIP '00' : Carte de la famille CPS '80' : Carte de TEST de la famille CPS gipcardtype Cette extension, concernant uniquement des certificats liés aux cartes de la famille CPS, contient le type de la carte. GipCardType ::= Integer Valeurs définies dans la table G02 de DICO-FR.GIP '00' : CPS '01' : CPF '02' : CDE ou CPE '03' : CPA de responsable ou CPA gipprofessioncode (optionnelle) Cette extension, concernant uniquement des certificats liés aux cartes de type CPS, contient le code de profession du Professionnel de Santé. Valeurs définies dans la table G15 de DICO-FR.GIP GipProfessionCode ::= Integer gipfutureprofessioncode (optionnelle) Cette extension, concernant uniquement des certificats liés aux cartes de type CPF, contient le code de profession du Professionnel de Santé en formation. Valeurs définies dans la table G16 de DICO-FR.GIP GipFutureProfessionCode ::= Integer Référence : ASIP_ExtensionX.509_note V2.doc Page 6/9
Exemples pratiques L exploitation d un certificat X.509 nécessite une connaissance préalable (hors l objet de ce document) des accès vers un annuaire LDAP, de la technologie PKCS#11, de la structure ASN1 des certificats X.509 et de la programmation d une machine ASN1. Recherche d un certificat X.509 Les certificats X.509 peuvent être récupérés depuis l annuaire LDAP CPS et/ou dans la carte CPS pour ses certificats d authentification et de signature (utilisation de PKCS#11). Format générique en LDAP ldap://adresse/dn?attributs?etendu?filtre Vers l annuaire du CPS ldap://annuaire.gip-cps.fr/cn=gip-cps Accès (langage C) par PKCS#11 dans la carte : // Définition variables globales #define ASCII_KEY_ID_SIGN "01000000" #define ASCII_KEY_ID_AUTH "04000000" #define LG_MAX_CERTIFICAT 5000 // Etapes préalables: // 1) Chargement de la DLL PKCS#11 cps_pkcs11_w32.dll [LoadLibrary] // 2) Recherche de la fonction C_GetFunctionList [GetProcAddress] // 3) Récupération du pointeur de fonctions PKCS#11 [C_GetFunctionList] // 4) Initialisation du module PKCS#11 [C_Initialize] // 5) Recherche des slots disponibles [C_GetSlotList] // 6) Ouverture de session sur l'un des slots disponibles [C_OpenSession] // 7) Login sur cette session [C_Login] [...] // Etape de lecture et traitement des certificats (extrait): CK_OBJECT_CLASS classeobjet = CKO_CERTIFICATE; CK_OBJECT_HANDLE infos_handle[2]; CK_ULONG maxobject = 2; CK_BYTE keyid[128]; CK_BYTE certserialnumber[128]; CK_BYTE certvalue[lg_max_certificat]; int i; // Template qui défini la classe d object que l on souhaite récupérer // (ici: CKO_CERTIFICATE) CK_ATTRIBUTE infos_template[] = { {CKA_CLASS, &classeobjet, sizeof(classeobjet)} }; Référence : ASIP_ExtensionX.509_note V2.doc Page 7/9
// Template qui contiendra les valeurs de retour sur l objet recherché CK_ATTRIBUTE templateattr [] = { {CKA_ID, keyid, sizeof(keyid)}, {CKA_SERIAL_NUMBER, certserialnumber, sizeof(certserialnumber)}, {CKA_VALUE, certvalue, sizeof(certvalue)} }; // Recherche des certificats: // Initialiser la recherche à partir du template rv = (*pfunctionlist->c_findobjectsinit)(hsession, infos_template, 1); if (rv!= CKR_OK) return rv; // Récupérer un handle sur les objets trouvés rv = (*pfunctionlist->c_findobjects)(hsession, infos_handle, maxobject, &maxobject); if (rv!= CKR_OK) return rv; // Finaliser la recherche rv = (*pfunctionlist->c_findobjectsfinal)(hsession); if (rv!= CKR_OK) return rv; // Le nombre de certificats trouvés (maxobject) est de 2 pour une carte CPS printf("ok: %d certificats trouves\n", maxobject); // Traitement des certificats trouvés for (i=0; (unsigned) i < maxobject; i++) { // récupération des infos sur le certificat courant rv = (*pfunctionlist->c_getattributevalue)(hsession, infos_handle[i], templateattr, 3); if (rv!= CKR_OK) return rv; // traitement de ce certificat, avec les éléments suivants: // - templateattr[0] contient l'identifiant de la clé du certificat (keyid), // correspondant à l'une des 2 variables globales ASCII_KEY_ID_SIGN // ou ASCII_KEY_ID_AUTH définies ci-dessus // - templateattr[1] contient le numéro de série du certificat (certserialnumber) // - templateattr[2] contient la valeur binaire du certificat (certvalue) [...] } Référence : ASIP_ExtensionX.509_note V2.doc Page 8/9
Extraction d une extension d un certificats X.509 Un certificat peut être exploité par des Boîte à outils du type Open SSL, DumpASN1, SSLDump Exemples : openssl ans1parse -in <MonCertificat.cer> dumpasn1 [-acdefhlprstuxz] <MonCertificat.cer> Référence : ASIP_ExtensionX.509_note V2.doc Page 9/9