URL: https://linuxfr.org/users/claudex/journaux/belgian-electronic-card Title: Belgian Electronic Card Authors: claudex Date: 2015年01月04日T22:48:05+01:00 License: CC By-SA Tags: smartcard, x509, beid, debian et ubuntu Score: 35 Cher journal, Récemment, j'ai renouvelé ma carte d'identité. Comme j'avais lu la [très bonne dépêche sur les cartes OpenPGP](//linuxfr.org/news/openpgp-card-une-application-cryptographique-pour-carte-a-puce) et une puce qui tenait à ma carte d'identité, je me suis dit que c'était l'occasion de tester les certificats x509 inclus dedans. Au final, c'est une smartcard comme les autres[^1]. Il faut dire que l'état fournit un middleware opensource qui est directement compatible avec le standard [PKCS](http://fr.wikipedia.org/wiki/Public_Key_Cryptographic_Standards)11. J'ai donc téléchargé [les logiciels adéquats](http://eid.belgium.be/fr/utiliser_votre_eid/installer_le_logiciel_eid/linux/). Ainsi que `opensc`. [^1]: ça veut donc dire qu'il y a quelques adaptations à faire. Ensuite, on peut s'amuser à voir que ça marche avec `pkcs11-tool --module /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0 --login --test`. Malheureusement, pour moi, sous Debian, on dirait qu'il y a un problème de dépendance sur les binaires fournis pour Debian et ça ne marche pas, par contre, en recompilant (et installant) [les sources](https://code.google.com/p/eid-mw/source/browse/), c'est bon. On peut aussi voir les données avec `pkcs15-tool -D`. On voit donc qu'il y a des certificats lisibles. Pourquoi donc ne pas les utiliser pour s'authentifier sur le PC[^2] avec `pam-pkcs11`. [^2]: la question est rhétorique. Sinon, le journal a peu d'intérêt. Je dois dire qu'au final, c'est relativement simple, une fois qu'on a compris quels fichiers devaient être modifié. Je me suis grandement inspiré de [deux](http://ubuntuforums.org/showthread.php?t=1557180) [posts](http://ubuntuforums.org/showthread.php?t=1557180#2) qui parle des smartcard en général et pas d'une eID sur le forum Ubuntu pour cela. Premièrement, on créés les répertoires `/etc/pam_pkcs11`, `/etc/pam_pkcs11/cacerts` et `/etc/pam_pkcs11/crls`. Ensuite, on copie la configuration par défaut `gzip -ckd /usr/share/doc/libpam-pkcs11/examples pam_pkcs11.conf.example.gz | sudo tee /etc/pam_pkcs11/pam_pkcs11.conf`. Il faut modifier ce fichier pour qu'il utilise la bibliothèque donnée plus haut, la variable module devient: ```text module = /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0 ``` Il faut aussi définir un *mapper* pour faire le lien entre votre compte et un des champs de la carte. Un défaut que je trouve à cette carte d'identité, c'est que le *Common Name* contient l'usage du certificat, c'est-à-dire que le certificat pour s'authentifier a pour CN: *Xavier Claude (Authentication)*. Il faut donc un fichier pour associer ce compter à votre compte du système. On définit le fichier `/etc/pam_pkcs11/cn_map` qui contient: ```text Xavier Claude (Authentication) -> claudex ``` Et dans `/etc/pam_pkcs11/pam_pkcs11.conf`, on change les lignes: ```text use_mappers = cn; ``` et ```text mapper cn { #debug = true; module = internal; mapfile = file:///etc/pam_pkcs11/cn_map } ``` Ensuite, il faut extraire le certificat utilisé pour signer les certificats utilisateurs qui sera utilisé pour valider le certificat que vous présentez, pour cela, un coup de `pkcs15-tool --read-certificate 4` (4 étant l'id donné par la commande `pkcs15-tool -D`, il est aussi possible de l'extraire via l'interface graphique `eid-viewer` qui présente la hiérarchie de signature de manière claire). Il faut placer ce fichier dans `/etc/pam_pkcs11/cacerts`. Ensuite, on met à jour les liens: ```sh cd /etc/pam_pkcs11/cacerts sudo pkcs11_make_hash_link ``` Comme l'article que j'ai lié, j'ai d'abord testé avec sudo, parce que c'est très facile. On ajoute dans `/etc/pam.d/sudo`, la ligne: ```text auth sufficient pam_pkcs11.so ``` Et on peut directement tester avec un `sudo -i` et ça devrait marcher si vous n'avez pas retirer la carte du lecteur depuis le début. Et oui, il y a un autre problème malgré la recompilation, on a le message suivant quand on essaye à froid:>(process:25550): Gtk-WARNING **: This process is currently running setuid or setgid.>This is not a supported use of GTK+. You must create a helper program instead.>For further details, see:>> http://www.gtk.org/setuid.html>>Refusing to initialize GTK+. Quand on a déjà rentré le PIN avec, par exemple, un `pkcs11-tool --module /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0 --login --test`, la carte est déjà délocké et ne redemande pas le PIN. Après, on peut s'amuser à aller plus loin avec `pkcs11_eventmgr`, qui peut locker le compte quand on retire la carte du lecteur. Le fichier de config est le suivant (vous remarquerez qu'il n'y a rien pour délocker le compte, c'est un exercice laissé au lecteur[^3]). Voici un exemple de fichier de conf pour KDE 4.14 (ça fait varier le screen locker) à placer dans `/etc/pam_pkcs11/pkcs11_eventmgr.conf`: ```text pkcs11_eventmgr { # Run in background? Implies debug=false if true #daemon = true; # show debug messages? #debug = false; debug = true; # polling time in seconds polling_time = 1; # expire time in seconds # default = 0 ( no expire ) expire_time = 0; # pkcs11 module to use pkcs11_module = /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0; # # list of events and actions # Card inserted event card_insert { # what to do if an action fail? # ignore : continue to next action # return : end action sequence # quit : end program on_error = ignore ; # You can enter several, comma-separated action entries # they will be executed in turn #action = "play /usr/share/sounds/warning.wav", # "xscreensaver-command -deactivate"; #action = "qdbus | grep kscreenlocker_greet | xargs -I {} qdbus {} /MainApplication quit"; } # Card has been removed event card_remove { on_error = ignore; #action = "play /usr/share/sounds/error.wav", # "xscreensaver-command -lock"; action = "qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock"; } # Too much time card removed event expire_time { on_error = ignore; action = "/bin/false"; } } ``` Après, on peut le lancer avec `pkcs11_eventmgr`, retirer la carte du lecteur et voir l'écran se verrouiller. En conclusion, à cause des problèmes avec la présentation de la fenêtre GTK (le mauvais paquet Debian ainsi que l'exécution en suid) pour afficher le code PIN, cela reste un gadget pour l'instant. Les prochaines étape sont le délockage de l'écran de veille, l'identification SSH et si je suis motivé, un rapport de bug. [^3]: bon, je n'ai rien troué pour délocker le compte de manière sûre. Parce que ce que j'ai trouvé, en commentaire du fichier de conf, ça délocke le compte quelque soit la carte qu'on rentre dedans. Et comme on est dimanche soir, j'ai la flemme de chercher plus loin.

AltStyle によって変換されたページ (->オリジナル) /