OS X 10.9 est maintenant dans la nature et comme depuis 10.7, le support des cartes à puce n’est pas quelque chose de mis en avant par Apple. Pour autant, OS X supporte toujours l’authentification par carte à puce, que ce soit via des solutions commerciales ou par des projets libres.
Aussi, 10.9 supporte les cartes à puce sans aucun souci. Cependant, quelques modifications dans le système de gestion de la base d’autorisation me donnent l’occasion de faire une mise à jour de mon précédent article où j’expliquant comment supporter l’authentification par carte à puce sur OS X Lion via un serveur Open Directory.
Pour être faire simple, quasiment rien ne change. Aucun système de carte à puce n’est supporté nativement, vous devez installer les pilotes nécessaires. Si vous avez déjà lu mon ancien article, vous pouvez très rapidement passer à la fin de l’article. La seule chose qui change concerne la modification de la base d’autorisation.
Jusqu’à présent, les cartes de type BELPIC, CAC, CACNG, JPKI et PIV étaient supportés via le projet SmartCard Service sur MacOSForge. À l’heure où j’écris ces lignes, le projet n’est pas à jour pour 10.9. Cependant, il semble que les pilotes pour 10.8 fonctionnent sans aucun souci sur 10.9, il suffit de les installer à la main. Si vous avez besoin d’un support plus officiel d’une de ces cartes, vous devrez vous tourner vers des solutions commerciales comme Centrify, Thursby ou autre. Autrement, comme moi vous pouvez choisir un système de carte à puce fonctionnant avec OpenSC (attention, le site à changé, il est maintenant sur GitHub). Si vous êtes en Europe et que vous souhaitez vous procurer des lecteurs et cartes compatibles OpenSC, voyez auprès du site gooze.eu.
Pour que le système soit reconnu, il faut donc installer les pilotes nécessaires à la lecture de la carte. Dans mon cas, ce sera le package de OpenSC pour OS X.
Préparation des cartes
Cette partie de la procédure concerne les cartes vierges. Si vous utilisez une carte déjà pourvue d’un certificat comme une carte gouvernementale, vous pouvez passer à l’étape suivante.
Pour initialiser une carte, il faut en premier s’assurer de son bon fonctionnement. En fonction des outils, les choses sont différentes, ici OpenSC fourni un utilitaire en ligne de commande permettant de tester le bon fonctionnement du lecteur et de la carte en affichant le message ATR de la carte.
$ opensc-tool --atr Using reader with a card: Feitian SCR301 00 00 3b:9f:95:81:31:fe:9f:00:65:46:53:05:30:06:71:df:00:00:00:80:6a:82:5e |
Si à ce stade vous n’arrivez pas à interroger la carte, vous êtes bon pour un redémarrage de la dernière chance avant de contacter le support technique de votre système de carte à puce.
Si tout se passe bien, il vous faut formater votre carte à puce pour la préparer à recevoir vos certificats X.509.
$ pkcs15-init -E $ pkcs15-init --create-pkcs15 --profile pkcs15+onepin --use-default-transport-key --label "Yoann Gini" --pin 1234 --puk 11111111 Using reader with a card: Feitian SCR301 00 00 |
Ici la commande permet d’indiquer le type d’usage attendu de la carte ainsi que son nom, son code PIN initial et le code PUK de récupération associé. Vous êtes déjà habitué avec ces concepts via les cartes SIM de vos opérateurs de téléphonie mobile.
Une fois la carte formatée il est possible de la consulter pour voir qu’elle est prêt et vierge.
$ pkcs15-tool --dump Using reader with a card: Feitian SCR301 00 00 PKCS#15 Card [Yoann Gini]: Version : 0 Serial number : 1509152617290911 Manufacturer ID: EnterSafe Last update : 20120412064836Z Flags : EID compliant PIN [User PIN] Object Flags : [0x3], private, modifiable ID : 01 Flags : [0x32], local, initialized, needs-padding Length : min_len:4, max_len:16, stored_len:16 Pad char : 0x00 Reference : 1 (0x01) Type : ascii-numeric Path : 3f005015 |
Il ne reste donc plus qu’à charger votre certificat de sécurité sur la carte.
$ pkcs15-init --store-private-key Desktop/YoannGini.p12 -l "yoann@inig-services.com" --format pkcs12 --auth-id 01 Using reader with a card: Feitian SCR301 00 00 error:23076071:PKCS12 routines:PKCS12_parse:mac verify failure Please enter passphrase to unlock secret key: Importing 1 certificates: 0: /emailAddress=yoann@inig-services.com User PIN [User PIN] required. Please enter User PIN [User PIN]: |
Les données du certificat ici contenues dans Desktop/YoannGini.p12 sont la clef publique ainsi que la clef privée. La clef publique doit être impérativement signée par une autorité reconnue valide par le Mac. Le certificat racine de l’autorité ainsi que les certificats intermédiaires nécessaires à la validation de votre certificat utilisateur doivent impérativement se trouver dans le trousseau système des Mac devant réaliser de l’authentification par carte à puce.
Lors de l’enregistrement du certificat sur la clef, il vous sera demandé le mot de passe de protection de votre clef privée (qui protège l’accès à votre fichier p12) ainsi que le code PIN de la carte.
Une fois le tout chargé, il est possible de lire de nouveau le contenu de la carte pour vérifier la présence des données.
$ pkcs15-tool --dump Using reader with a card: Feitian SCR301 00 00 PKCS#15 Card [Yoann Gini]: Version : 0 Serial number : 1509152617290911 Manufacturer ID: EnterSafe Last update : 20120412113152Z Flags : EID compliant PIN [User PIN] Object Flags : [0x3], private, modifiable ID : 01 Flags : [0x32], local, initialized, needs-padding Length : min_len:4, max_len:16, stored_len:16 Pad char : 0x00 Reference : 1 (0x01) Type : ascii-numeric Path : 3f005015 Private RSA Key [yoann@inig-services.com] Object Flags : [0x3], private, modifiable Usage : [0x2C], sign, signRecover, unwrap Access Flags : [0x0] ModLength : 2048 Key ref : 1 (0x1) Native : yes Path : 3f005015 Auth ID : 01 ID : 7bbc7d5c611930933778c54cdb3261af8064f9a2 GUID : {7bbc7d5c-6119-3093-3778-c54cdb3261af} X.509 Certificate [/emailAddress=yoann@inig-services.com] Object Flags : [0x2], modifiable Authority : no Path : 3f0050153100 ID : 7bbc7d5c611930933778c54cdb3261af8064f9a2 GUID : {7bbc7d5c-6119-3093-3778-c54cdb3261af} Encoded serial : 02 11 00B315BDC28CECC9F6342EB2C1EDB2F0E0 |
Si vous sortez puis réinsérez votre carte de son lecteur, vous verrez les données disponible dans le Trousseau d’accès.
Tout ce qu’il vous reste à faire, c’est éventuellement changer le code PIN de la carte avant de la donner à l’utilisateur.
$ pkcs15-tool --change-pin Using reader with a card: Feitian SCR301 00 00 Enter old PIN [User PIN]: Enter new PIN [User PIN]: Enter new PIN again [User PIN]: |
Association des utilisateurs à leur certificat
Pour que le système soit capable d’authentifier un utilisateur (local ou réseau) via une carte, il faut à un moment avoir fait une association entre la carte et cet utilisateur. Différentes méthodes existent, ici je ne parlerais que de la plus simple, qui consiste en l’enregistrement de l’empreinte du certificat dans l’annuaire de service.
Pour cela, il faut commencer par obtenir cette empreinte. Cela se fait avec une ligne de commande, sc_auth, présent par défaut sur OS X.
$ sc_auth hash 8FC26FBDB681121596292A3D0A8AB9952EC1A4AC yoann@inig-services.com 5BC8B21A7C529619FE74FE3DC3F0683C3C2A3EE2 com.apple.systemdefault 574C167B36F78078DC4087282AF2F5C0630E897E com.apple.kerberos.kdc 5BC8B21A7C529619FE74FE3DC3F0683C3C2A3EE2 com.apple.systemdefault 574C167B36F78078DC4087282AF2F5C0630E897E com.apple.kerberos.kdc 6F5ABA1813E4D7BB705F33AFCBBB506E1B1C3415 Device Management Identity Certificate |
Avec le verbe hash, la commande vous sort la liste des empreintes de clef actuellement disponible sur le système. Repérez celle qui vous intéresse en fonction du nom et copiez ce nom.
Pour maintenant associer effectivement l’utilisateur à sa clef, il faut de nouveau utiliser la commande sc_auth. Cependant, la version fournie par Apple sur OS X présente une limitation, elle ne peut pas éditer un annuaire réseau, elle ne travaille qu’en local. Aussi, j’ai mis à disposition une version modifier du script sc_auth contournant cette limitation.
L’usage de ce script est en tout point identique à la version fournie par Apple exception faite de l’ajout des options a p et P permettant de spécifier votre compte administrateur et son mot de passe (voir l’aide).
Pour associer un utilisateur Open Directory à son certificat, il faudra utiliser le verbe accept.
$ ./sc_auth accept -a diradmin -P -d /LDAPv3/office.inig-services.com -u yoanngini -k yoann@inig-services.com Password for diradmin: |
Il est possible de vérifier le bon fonctionnement de la commande via le verbe list.
$ ./sc_auth list -u yoanngini -d /LDAPv3/office.inig-services.com 8FC26FBDB681121596292A3D0A8AB9952EC1A4AC |
L’opération effectuée par sc_auth est au final très simple, elle ajoute une possibilité au champ AuthenticationAuthority de l’utilisateur cible, indiquant la possibilité d’une authentification de type « pubkeyhash » et spécifiant alors le hash attendu.
$ dscl /LDAPv3/office.inig-services.com read /Users/yoanngini AuthenticationAuthority AuthenticationAuthority: ;ApplePasswordServer;0x5b4b4946b6ea9b2fd0000000600000006,1024 35 12345 root@office.inig-services.com:192.168.42.10 ;Kerberosv5;0x5b4b4946b6ea9b2fd0000000600000006,1024 35 12345 root@office.inig-services.com:192.168.42.10 ;pubkeyhash;8FC26FBDB681121596292A3D0A8AB9952EC1A4AC |
L’annuaire de service contient maintenant les informations nécessaires pour l’authentification. Il ne reste plus qu’à configurer les systèmes client pour utiliser les cartes à puce.
Configuration des postes clients pour l’usage de la carte à puce
Ici ce trouve la grande différence entre 10.9 et ces prédécesseurs. En effet, la base d’autorisation du système normalement situé dans /etc/authorization n’existe plus sous la forme d’un fichier plist. Aujourd’hui, c’est une base SQLite située dans /var/db/auth.db. Hors de question de l’éditer directement.
La méthode normale d’édition de cette base est via la ligne de commande « security authorizationdb ». Chose étonnante, sous 10.9 Apple a étendu cette commande pour supporter directement l’activation ou la désactivation de l’authentification par carte à puce. Il n’est plus nécessaire de jouer avec les différents droits de la base à la main.
$ sudo security authorizationdb smartcard enable YES (0) |
Sortez votre carte du lecteur, fermez votre session, insérez la carte et attendez quelques secondes, le champ mot de passe se transforme en champ code PIN.
Si lorsque vous entrez votre code PIN l’authentification échoue, connectez-vous en même temps en SSH sur cette machine pour suivre en temps réel le journal d’évènement avec la commande « syslog -w ». La plupart du temps, le problème vient d’un certificat qui n’est pas considéré comme étant de confiance.
Dans le cas de 10.9.0, il reste un problème vis-à-vis de l’authentification par carte à puce. La ligne de commande d’Apple permet en effet d’activer le support des cartes à puce, mais ne permet pas (pour le moment?) de désactiver l’authentification par mot de passe.