====== Token Ikey3000 sur Linux ====== ===== Introduction ===== Ce tutoriel aborde l’installation d’un lecteur de cartes à puce ou d'un Token USB sous Linux. Le Token USB utilisé pour réaliser ce tutoriel est le Rainbow Ikey 3000, mais notre document peut facilement s'étendre aux autres lecteurs, notamment ceux sur port série ou parallèle. L’objectif de cette installation est de gérer l’authentification des utilisateurs via un Token USB. La réalisation de cet objectif (notamment la configuration des modules PAM, etc.) fera l’objet d’un document ultérieur. Ce tutoriel se contente de détailler la phase d’installation et de configuration du Token USB, tout en proposant l’installation d’outils complémentaires permettant de manipuler le contenu de la carte à puce. Enfin, bien que la distribution utilisée soit une Ubuntu Feisty (distribution Debian en cours de validation), il est possible de l'adapter facilement pour d'autres distributions. **Remarque** : Pour le lecteur qui possèderait une distribution Fedora ou Suse, l'installation a été validée, en revanche, pas encore documentée. Nous contacter pour obtenir les différences entre la distribution Ubuntu et Fedora. ==== Présentation des cartes à puces ==== cf. les documents suivants pour obtenir des informations complémentaires sur les cartes à puce et Token : * [[http://www.jalix.org/ressources/miscellaneous/security/_IFT6271/Chap_14.pdf]] (FR) * [[http://people.cs.uchicago.edu/~dinoj/smartcard/javacardarch.html]] (EN) ===== PS/SC et OpenCT ===== ==== Présentation ==== La gestion standard de la communication entre un ordinateur et une carte à puce a été définie par le groupe de travail PC/SC1. PC/SC est donc une API qui fournit aux développeurs un ensemble de primitives standard permettant de gérer et de communiquer avec les lecteurs et les cartes à puces. Ainsi, les opérations standards effectuées sur les cartes à puces sont gérées par cette API de façon homogène. Chaque fournisseur de lecteur doit simplement fournir un driver spécifique à son lecteur implémentant chaque fonction de cette API. ==== Installation de la librairie libsub ==== PC/SC-lite utilise la librairie libusb pour accéder à un lecteur USB. Pour l’installer (sous Ubuntu) : sudo apt-get install libusb-dev libusb-0.1-4 La librairie est installée dans /usr/lib/libusb.so. Dans le cas contraire, il est nécessaire de récupérer les sources sur le site web à l'adresse suivante : http://libusb.sourceforge.net/ et procéder à l'installation manuellement. === Vérification de bon fonctionnement === Comme le lecteur fonctionne sur le port USB, le module usbcore doit être chargé. On le vérifie par la commande : root# lsmod | grep usbcore Résultat : usbcore 134280 4 usbhid, ehci_hcd, uhci_hcd Si ce n’est pas le cas, les insérer avec la commande modprobe . Le port USB doit être monté dans le système de fichier. ==== Installation de pcsc-lite ==== PCSC-LITE est le daemon qui implémente le standard PCSC (cf. Présentation PS/SC). Son installation sur votre machine est réalisée de la manière suivante : sudo apt-get install pcscd En complément, il est nécessaire d'installer la librairie libccid qui contient les pilotes des cartes à puce et Token USB. Dans le cas où l'installation de libccid n'est pas réalisée en relation avec le package pcscd, ajouter la commande suivante : sudo apt-get install libccid Exécuter le daemon pcscd, par l'intermédiaire de la commande suivante : sudo invoke-rc.d pcscd start ou sudo /etc/init.d/pcscd start ==== Installation de pcsc-tools ==== PCSC-TOOLS est un ensemble d’outils pour manipuler les cartes à puce à travers PC/SC. Ces outils permettent notamment de tester un pilote PC/SC, une carte ou un lecteur, d’adresser des commandes dans un environnement en ligne de commande ou graphique. Les outils fournis par pcsc-tools sont détaillés à la suite : * pcsc_scan : il analyse chaque lecteur PC/SC connecté et fournit des informations sur les cartes insérées. Cet exécutable utilise un script Perl – ATR_analysis - qui permet de récupérer et d’interpréter l’ATR de la carte insérée. * scriptor (et sa version graphique par interface GTK gscriptor) : c'est un script Perl permettant d’envoyer des commandes à la carte insérée. L'installation du package pcsc-tools est réalisée par la commande suivante : sudo apt-get install pcsc-tools === Vérification de la détection du lecteur DELL === Pour ceux qui possèdent un lecteur interne de carte à puce sur les portables Dell, vous pouvez saisir la commande suivante pour vérifier la présence du lecteur avec l'outil pcsc_scan. pcsc_scan Résultat : Scanning present readers 0: O2 Micro Oz776 00 00 sat Jul 28 14:48:05 2007 Reader 0: O2 Micro Oz776 00 00 Card state: Card removed, **Remarque** : Pas d'inquiétude si vous ne voyez pas encore le Token USB Rainbow Ikey3000. Il est nécessaire d'installer un package complémentaire pour sa prise en compte et pour le voir apparaître avec la commande pcsc_scan. ==== Installation de OpenCT ==== OpenCT fournit une implémentation pour le support de certains lecteurs de carte ou de Token USB, dont celui de Rainbow. Il est vu comme un pilote au format ifdhandler pour PC/SC-Lite et comme pilotes pour CT-API (CardTerminal), OpenCT a également un mécanisme primitif pour exporter les lecteurs de cartes ou Token USB vers des machines à distance par l'intermédiaire du TCP/IP. L'installation est réalisée par l'intermédiaire de la commande suivante : sudo apt-get install openct Exécuter le daemon openct, par l'intermédiaire de la commande suivante : sudo invoke-rc.d openct start ou : sudo /etc/init.d/openct start === Ajout de l'utilisateur au groupe scard === Utiliser les commandes suivantes afin d'ajouter l'identifiant de l'utilisateur au groupe scard : sudo vi /etc/group fichier /etc/group : scard:x:120: Ajouter ici votre identifiant utilisateur **Important** : Il est nécessaire de se déconnecter de la session pour que le nouveau groupe soit pris en compte pour l'utilisateur. === Affichage des lecteurs compatible OpenCT === Introduire le Token USB Ikey 3000 dans un port USB. Puis, saisir la commande suivante : openct-tool list Résultat : 0 Rainbow Ikey 3000 Le lecteur est bien présent et pris en compte pas OpenCT. ==== Installation de OpenSC ==== Un « card format » est une description détaillée de la façon dont sont représentés sur une carte des objets cryptographiques comme une clé ou un certificat. PKCS#15 [3] est un standard pour le « card format » supportant tous les objets définis dans la norme PKCS#11. OpenSC est une bibliothèque (libopensc) permettant notamment de gérer les cartes compatibles avec le standard PKCS#15. L’utilisateur pourra ainsi initialiser, personnaliser et manipuler des cartes, signer et déchiffrer des données à partir de clés privées stockées sur la carte. La procédure d’installation du package OpenSC est la suivante : : sudo apt-get install opensc === Modification du fichier de configuration === Une petite option est à modifier dans le fichier de configuration de opensc. Pour ce faire effectuer les opérations suivantes : sudo vi /etc/opensc/opensc.conf rechercher la valeur « cache_pin ». Décommenter la ligne pour positionner la valeur à « true », de cette manière : # In this case, you can turn on PIN caching by setting # cache_pins = true # # Default: false cache_pins = true; === Vérification de la présence des lecteurs avec OpenSC === $ opensc-tool -l Résultat : Nr. Driver Name 0 pcsc O2 Micro Oz776 00 00 1 openct Rainbow iKey 3000 2 openct OpenCT reader (detached) 3 openct OpenCT reader (detached) 4 openct OpenCT reader (detached) 5 openct OpenCT reader (detached) Cette commande permet d'afficher les lecteurs gérés par les différentes implémentations. Dans notre exemple ,le lecteur est en position 1. Selon l'architecture de votre machine, le résultat peut différer. L'important étant de noter la position du lecteur pour la suite des opérations. ===== Utilisation du Token USB sous Linux ===== Pour utiliser les Token USB sous Linux, il faut initialiser la puce contenue dans le Token USB. Pour ce faire, OpenSC fournit des applications, tels que pkcs11-tool, pkcs15-crypt, pkcs15-tool et pkcs15-init pour manipuler le contenu des puces. La démarche de cette documentation n'est pas de fournir une description exhaustive de chacun de ces logiciels et de leur fonctionnalité, mais de proposer les commandes suffisantes pour réaliser les opérations de base qui permettront la génération des certificats numériques via la PKI LINAGORA. Pour ce qui souhaiterait approfondir le sujet, vous trouverez toutes les informations et bien plus sur le site Web du projet d'openSC : http://www.opensc-project.org/ et l'équipe sécurité de LINAGORA. ==== Les opérations de base ==== === Effacer et Initialisation de la carte === La première étape consiste à initialiser la nouvelle carte, c'est-à-dire à créer le « système de fichier » pour le dépôt des certificats et des clefs. Pour ce faire, pkcs15-init permet de satisfaire à ce besoin, la commande suivante supprime le contenu de la carte et initialise le PKCS15 : pkcs15-init -ET -r 1 **Remarque** : l'extension « -r 1 » permet de spécifier vers quel lecteur est dirigée la commande. Dans notre exemple, nous utilisation une machine qui possède un lecteur interne en position 0 et un Token USB en position 1, comme affiché dans la section 2.6.1. La commande opensc-tool -l permet de connaitre la position de son lecteur. En position « 0 », il n'est pas nécessaire de préciser sa position dans la commande pkcs15. Le lecteur de ce document prendra soin d'adapter la commande selon son matériel. === Création du magasin === Cette étape consiste à créer un conteneur pour le stockage des certificats, sur un des slots de la carte, un label va être créé sur la carte et sera protégé avec le code PIN et PUK. pkcs15-init -CT -p pkcs15+onepin -r 1 À la suite de la commande, saisir le code PIN et ensuite PUK, avec un minimum de 6 caractères === Insertion d'un PKCS12 (optionnelle) === Pour les utilisateurs qui auraient déjà généré leur certificat hors du Token. Il est possible de l'importer dans le Token USB pour l'utiliser ultérieur depuis le Token USB. Pour ce faire, il faut exporter votre certificat et la biclé au format PKCS12 depuis votre navigateur et l'importer le résultat de l'export dans le Token USB. Voici une description des opérations pour réaliser l'importation du PCSK12 sur le Token USB. == Exporter le PKCS12 du navigateur == Exécuter Firefox/Mozilla. Effectuer les opérations suivantes * Aller dans le Menu Édition ; * Sélectionner « préférences » ; * Appuyer sur le bouton « Avancé » ; * Sélectionner l'onglet « Chiffrement » ; * Appuyer sur le bouton « Afficher les certificats ». * Sélectionner le certificat que vous souhaitez exporter en PKCS12 ; * Appuyer sur le bouton exporter * Sélectionner un répertoire pour le déposer et saisir le nom que vous souhaitez à votre fichier.PKCS12 ; * Saisir le mot de passe de protection de votre Keystore Mozilla (si ce mot de passe a été préalablement défini) ; * Saisir un mot de passe pour protéger votre fichier PKCS12. L'export du certificat est terminé == Importer PKCS12 dans le Token USB == L'import dans le Token USB est réalisé avec la commande suivante : pkcs15-init --store-private-key fichier.p12 --format pkcs12 --pin -r 1 --auth-id 01 ===== Utiliser le Token USB avec Firefox/Mozilla ===== Il est à noter que pour un usage pratique, nous préconisons l'utilisation du certificat au format logiciel dans Mozilla/Firefox et Thunderbird. Le certificat sur Token USB est à favoriser dans le cas de nomadisme. Néanmoins, l'utilisation du Token USB renforce la sécurité des données d'authentification, mais son utilisation engendre des contraintes du à l'absence de gestion des accès concurrents avec openSC Pour utiliser le TokenUSB avec Firefox/Mozilla, il faut préalablement ajouter le driver pkcs11 pour la gestion des Token dans Mozilla/Firefox. Exécuter Firefox/Mozilla. Effectuer les opérations suivantes * Aller dans le Menu Édition ; * Sélectionner « préférences » ; * Appuyer sur le bouton « Avancé » ; * Sélectionner l'onglet « Chiffrement » ; * Appuyer sur le bouton « périphérique de sécurité ». Copie d'écran * Appuyer sur le bouton « charger » ; * Saisir un nom de module, par exemple « OpenSC » ; * Appuyer sur le bouton « Parcourir » ; * Aller dans le répertoire /usr/lib ; * Sélectionner le fichier opensc-pkcs11.so * Valider le message pour l'installation d'un nouveau module ; * Valider la boite de dialogue pour l'insertion du module ; * Fermer votre navigateur ; * Insérer votre Token USB ; * Lancer de nouveau votre navigateur. Votre navigateur est à présent opérationnel pour utiliser le Token USB. === Tester le bon fonctionnement du module (cas PKCS12) === * Aller dans le Menu Édition ; * Sélectionner « préférences » ; * Appuyer sur le bouton « Avancé » ; * Sélectionner l'onglet « Chiffrement » ; * Appuyer sur le bouton « périphérique de sécurité » ; * Sélectionner la ligne avec « user PIN » ; * Appuyer sur le bouton « Chargé » ; * Saisir votre code PIN. Votre certificat et chargé dans votre navigateur. Pour le voir : * Aller dans le Menu Édition ; * Sélectionner « préférences » ; * Appuyer sur le bouton « Avancé » ; * Sélectionner l'onglet « Chiffrement » ; * Appuyer sur le bouton « Afficher les certificats ». * Votre certificat devrait être visible. ==== Obtenir un certificat pour le Token USB ==== Pour ceux qui souhaitent émettre leur certificat en utilisant directement le Token USB, insérer votre Token dans votre navigateur. Accéder à la page publique de la PKI comme indiqué dans votre courriel transmis par l'équipe support. Suivre les opérations indiquées sur cette page. === Vérifier la présence du certificat après émission === * Aller dans le Menu Édition ; * Sélectionner « préférences » ; * Appuyer sur le bouton « Avancé » ; * Sélectionner l'onglet « Chiffrement » ; * Appuyer sur le bouton « Afficher les certificats ». * Votre certificat devrait être visible.