tag:linuxfr.org,2005:/tags/beid/publicLinuxFr.org : les contenus étiquetés avec « beid »2015-01-09T18:20:10+01:00/favicon.pngtag:linuxfr.org,2005:Diary/355142015-01-04T22:48:05+01:002015-01-04T23:29:17+01:00Belgian Electronic CardLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cher journal,</p>
<p>Récemment, j'ai renouvelé ma carte d'identité. Comme j'avais lu la <a href="//linuxfr.org/news/openpgp-card-une-application-cryptographique-pour-carte-a-puce">très bonne dépêche sur les cartes OpenPGP</a> 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<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup>. Il faut dire que l'état fournit un middleware opensource qui est directement compatible avec le standard <a href="http://fr.wikipedia.org/wiki/Public_Key_Cryptographic_Standards">PKCS</a>11. J'ai donc téléchargé <a href="http://eid.belgium.be/fr/utiliser_votre_eid/installer_le_logiciel_eid/linux/">les logiciels adéquats</a>. Ainsi que <code>opensc</code>. </p>
<p>Ensuite, on peut s'amuser à voir que ça marche avec <code>pkcs11-tool --module /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0 --login --test</code>. 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) <a href="https://code.google.com/p/eid-mw/source/browse/">les sources</a>, c'est bon. On peut aussi voir les données avec <code>pkcs15-tool -D</code>. On voit donc qu'il y a des certificats lisibles. Pourquoi donc ne pas les utiliser pour s'authentifier sur le PC<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup> avec <code>pam-pkcs11</code>. </p>
<p>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 <a href="http://ubuntuforums.org/showthread.php?t=1557180">deux</a> <a href="http://ubuntuforums.org/showthread.php?t=1557180#2">posts</a> 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 <code>/etc/pam_pkcs11</code>, <code>/etc/pam_pkcs11/cacerts</code> et <code>/etc/pam_pkcs11/crls</code>. Ensuite, on copie la configuration par défaut <code>gzip -ckd /usr/share/doc/libpam-pkcs11/examples pam_pkcs11.conf.example.gz | sudo tee /etc/pam_pkcs11/pam_pkcs11.conf</code>. Il faut modifier ce fichier pour qu'il utilise la bibliothèque donnée plus haut, la variable module devient: </p>
<pre><code class="text">module = /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0</code></pre>
<p>Il faut aussi définir un <em>mapper</em> 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 <em>Common Name</em> contient l'usage du certificat, c'est-à-dire que le certificat pour s'authentifier a pour CN: <em>Xavier Claude (Authentication)</em>. Il faut donc un fichier pour associer ce compter à votre compte du système. On définit le fichier <code>/etc/pam_pkcs11/cn_map</code> qui contient:</p>
<pre><code class="text">Xavier Claude (Authentication) -> claudex</code></pre>
<p>Et dans <code>/etc/pam_pkcs11/pam_pkcs11.conf</code>, on change les lignes:</p>
<pre><code class="text">use_mappers = cn;</code></pre>
<p>et</p>
<pre><code class="text">mapper cn {
#debug = true;
module = internal;
mapfile = file:///etc/pam_pkcs11/cn_map
}</code></pre>
<p>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 <code>pkcs15-tool --read-certificate 4</code> (4 étant l'id donné par la commande <code>pkcs15-tool -D</code>, il est aussi possible de l'extraire via l'interface graphique <code>eid-viewer</code> qui présente la hiérarchie de signature de manière claire). Il faut placer ce fichier dans <code>/etc/pam_pkcs11/cacerts</code>. Ensuite, on met à jour les liens:</p>
<pre><code class="sh"><span class="nb">cd</span> /etc/pam_pkcs11/cacerts
sudo pkcs11_make_hash_link</code></pre>
<p>Comme l'article que j'ai lié, j'ai d'abord testé avec sudo, parce que c'est très facile. On ajoute dans <code>/etc/pam.d/sudo</code>, la ligne:</p>
<pre><code class="text">auth sufficient pam_pkcs11.so</code></pre>
<p>Et on peut directement tester avec un <code>sudo -i</code> 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:</p>
<blockquote>
<p>(process:25550): Gtk-WARNING **: This process is currently running setuid or setgid.<br>
This is not a supported use of GTK+. You must create a helper program instead.<br>
For further details, see:</p>
<p><a href="http://www.gtk.org/setuid.html">http://www.gtk.org/setuid.html</a></p>
<p>Refusing to initialize GTK+.</p>
</blockquote>
<p>Quand on a déjà rentré le PIN avec, par exemple, un <code>pkcs11-tool --module /usr/lib/x86_64-linux-gnu/libbeidpkcs11.so.0 --login --test</code>, la carte est déjà délocké et ne redemande pas le PIN.</p>
<p>Après, on peut s'amuser à aller plus loin avec <code>pkcs11_eventmgr</code>, 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<sup id="fnref3"><a href="#fn3" rel="footnote">3</a></sup>). Voici un exemple de fichier de conf pour KDE 4.14 (ça fait varier le screen locker) à placer dans<br><code>/etc/pam_pkcs11/pkcs11_eventmgr.conf</code>:</p>
<pre><code class="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";
}
}</code></pre>
<p>Après, on peut le lancer avec <code>pkcs11_eventmgr</code>, retirer la carte du lecteur et voir l'écran se verrouiller.</p>
<p>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.</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn1">
<p>ça veut donc dire qu'il y a quelques adaptations à faire. <a href="#fnref1" rev="footnote">↩</a></p>
</li>
<li id="fn2">
<p>la question est rhétorique. Sinon, le journal a peu d'intérêt. <a href="#fnref2" rev="footnote">↩</a></p>
</li>
<li id="fn3">
<p>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. <a href="#fnref3" rev="footnote">↩</a></p>
</li>
</ol>
</div><div><a href="https://linuxfr.org/users/claudex/journaux/belgian-electronic-card.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/104381/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/claudex/journaux/belgian-electronic-card#comments">ouvrir dans le navigateur</a>
</p>
claudexhttps://linuxfr.org/nodes/104381/comments.atom