Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
smartcards [Le 13/08/2011, 15:40] SaiyanRiku [Liens externes] |
smartcards [Le 21/03/2024, 17:42] (Version actuelle) Jean-Dom [javax.smartcardio] Fôte de Gramère |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Smart cards sous Linux ====== | + | {{tag>Trusty Xenial matériel sécurité}} |
+ | ---- | ||
- | ===== Présentation ===== | + | ====== Cartes à puce sous Ubuntu ====== |
- | Les Smart cards (carte à puce, carte sans contact...) sont des cartes intelligentes qui embarque un microcontrôleur ou un microprocesseur. Le nombre d'application est illimité. | + | Les Cartes à puce (smart cards en anglais) sont des cartes intelligentes qui embarquent un microcontrôleur ou un microprocesseur. Le nombre d'applications est illimité. |
- | Les exemples les plus populaire de smartcard sont les cartes de paiement, les cartes vitales, les cartes de transport ou encore les cartes de fidélité distribué en grande surface. | + | Les exemples les plus populaires de carte à puce sont les cartes de paiement, les cartes Vitale, les cartes de transport ou encore les cartes de fidélité distribuées en grandes surfaces.\\ |
+ | L'utilisation d'une carte à puce requiert l'installation sur la machine d'un lecteur de carte et une d'interface de communication. | ||
+ | Cette page traite de deux type de cartes, les cartes PC/SC et les cartes de type [[#javax.smartcardio]]. | ||
- | ===== Interface de communication ===== | + | [[wpfr>PC/SC|Personal computer/Smart Card]] (ou PC/SC) est une bibliothèque logicielle pour l'accès à des cartes à puce sous Microsoft Windows. Une implémentation libre de PC/SC, appelée PC/SC Lite, est disponible sous GNU/Linux et distribuée avec Mac OS X. |
+ | La spécification de cette bibliothèque est faite par le PC/SC Workgroup, composé de grands fabricants de carte à puce ou d'ordinateur. Son but est d'assurer une base standard de commandes pour permettre une meilleure interopérabilité entre PC, lecteurs de carte et cartes à puce elles-mêmes. | ||
- | L'utilisation d'une Smart Card requiert l'installation sur la machine d'un lecteur de carte et une interface de communication. | + | ===== Pré-requis ===== |
+ | |||
+ | * Disposer des [[:sudo|droits d'administration]]. | ||
+ | * Disposer d'une connexion à Internet configurée et activée. | ||
+ | ===== PC/SC (Personal computer/Smart Card) ===== | ||
- | ==== PC/SC (Personal computer/Smart Card) ==== | + | ==== Installation==== |
- | + | ||
- | Personal computer/Smart Card (ou PC/SC) est une bibliothèque logicielle pour l'accès à des cartes à puce sous Microsoft Windows. Une implémentation libre de PC/SC, appelée PC/SC Lite, est disponible sous GNU/Linux et distribuée avec Mac OS X. | + | |
- | La spécification de cette bibliothèque est faite par le PC/SC Workgroup, composé de grands fabricants de carte à puce ou d'ordinateur. Son but est d'assurer une base standard de commandes pour permettre une meilleure interopérabilité entre PC, lecteurs de carte et les cartes à puce elles-mêmes. (Wikipédia) | + | |
- | + | ||
- | === Installation === | + | |
- | + | ||
- | La gestion des lecteurs PC/SC n'est pas natif sous Linux, mais peut être très facilement ajouté par l'installation des paquets **[[apt>pcscd,libpcsclite1]]** qui installe respectivement le démon PC/SC et la bibliothèque de communication : | + | |
- | + | ||
- | <code> | + | |
- | sudo apt-get install pcscd libpcsclite1 | + | |
- | </code> | + | |
- | Par la suite suivant votre lecteur, il vous faudra installer le driver PC/SC adéquate. Un certain nombre est déjà fourni dans les dépôts Ubuntu. A vous d'installer celui correspondant à votre périphérique. | + | La gestion des lecteurs PC/SC n'est pas native sous Linux, mais peut être très facilement ajoutée par l'[[:tutoriel:comment_installer_un_paquet|installation des paquets]] **[[apt>pcscd,libpcsclite1,pcsc-tools]]** qui installent respectivement le démon PC/SC et la bibliothèque de communication. |
- | <code> | + | ====Configuration==== |
- | $> apt-cache search "PC/SC driver" | + | Par la suite, suivant votre lecteur, il vous faudra installer le pilote PC/SC correspondant à votre périphérique. Un certain nombre est déjà fourni dans les [[:depots|dépôts]] Ubuntu. Pour savoir lequel est nécessaire à l'utilisation de votre carte entrez la commande suivante dans un [[:terminal]] : <code>apt-cache search "PC/SC driver"</code> |
+ | Vous obtiendrez une réponse qui vous permettra de savoir quel paquet installer : <code> | ||
libacr38u - PC/SC driver for the ACR38U smart card reader | libacr38u - PC/SC driver for the ACR38U smart card reader | ||
libasedrive-serial - PC/SC driver for the Athena ASEDrive IIIe serial smart card reader | libasedrive-serial - PC/SC driver for the Athena ASEDrive IIIe serial smart card reader | ||
Ligne 37: | Ligne 35: | ||
pcsc-omnikey - PC/SC driver for Omnikey Cardman Smartcard readers (binary-only) | pcsc-omnikey - PC/SC driver for Omnikey Cardman Smartcard readers (binary-only) | ||
</code> | </code> | ||
+ | Installez le paquet correspondant à votre type de carte. | ||
+ | Le paquet **libccid** installé par défaut avec **pcscd** est le pilote PC/SC pour le standard [[wpen>Integrated_circuit_card_interface_device|CCID]]. Il permet la reconnaissance d'un grand nombre de lecteurs génériques basés sur ce standard. | ||
- | Le paquet **libccid** installé par défaut avec **pcscd** est le driver PC/SC pour le standard CCID. Il permet la reconnaissance d'un grand nombre de lecteurs génériques basés sur ce standard. | + | ==== Utilisation ==== |
- | === Test === | + | Pour vérifier que tout fonctionne, vous pouvez utiliser les outils du paquet **[[apt>pcsc-tools]]** : |
+ | * **pcsc_scan** : un petit script d'exemple qui détecte les périphériques et leurs cartes : <code>pcsc_scan</code> | ||
+ | * **gscriptor** : un petit logiciel avec interface graphique qui permet d'envoyer des commandes APDU. | ||
- | Pour vérifier que tout fonctionne, vous pouvez utiliser l'outil **pcsc_scan** du paquet **[[apt>pcsc-tools]]**. | ||
- | <code> | + | ===== javax.smartcardio ===== |
- | sudo apt-get install pcsc-tools | + | |
- | pcsc_scan | + | |
- | </code> | + | |
- | + | ||
- | Celui vous listera les lecteurs reconnu et les cartes détectés sur ceux-ci avec quelques informations supplémentaires. | + | |
- | ==== javax.smartcardio ==== | + | |
- | L'API Java Smart Card I/O défini par la JSR 268 est une API pour le langage Java permettant la communication avec les Smart Cards en utilisant l'ISO/IEC 7816-4 APDUs. Elle permet ainsi la lecture et l'écriture des cartes et fonctionne avec le lecteur PC/SC. | + | L'API Java Smart Card I/O défini par la JSR 268 est une API pour le langage Java permettant la communication avec les smart cards en utilisant l'ISO/IEC 7816-4 APDUs. Elle permet ainsi la lecture et l'écriture des cartes et fonctionne avec le lecteur PC/SC. |
- | Un des ses atouts majeur et que couplé à une applet Java, elle permet l'utilisation directement des cartes depuis le navigateur Web. | + | Un des ses atouts majeurs est que, couplée à une applet Java, elle permet l'utilisation des cartes directement depuis le navigateur Web. |
- | Cette API a été introduit depuis Java 1.6 et est disponible et fonctionnelle avec les [[java#implementations|implémentations Java de sun et openJDK]]. | + | Cette API a été introduit depuis Java 1.6 et est disponible et fonctionnelle avec les [[:java]] et [[:openJDK]]. |
- | === Exemple d'utilisation === | + | ==== Exemple d'utilisation ==== |
- | <code> | + | <code java> |
import javax.smartcardio.*; | import javax.smartcardio.*; | ||
import java.util.*; | import java.util.*; | ||
Ligne 130: | Ligne 125: | ||
</code> | </code> | ||
- | === Utilisation avec Eclipse === | + | ==== Utilisation avec Eclipse ==== |
- | Généralement, sous Eclipse vous obtiendrez un message d'erreur du type sur les classes de l'API : | + | Généralement, sous Eclipse vous obtiendrez sur les classes de l'API un message d'erreur de ce type : |
<note important>Access restriction: The type TerminalFactory is not accessible due to restriction on required library /usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar</note> | <note important>Access restriction: The type TerminalFactory is not accessible due to restriction on required library /usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar</note> | ||
- | Pour pallier à ce problème, il faut lever les restrictions d'Eclipse sur la JVM. | + | Pour pallier ce problème, il faut lever les restrictions d'Eclipse sur la JVM. |
* Clic droit sur votre projet puis **Properties** | * Clic droit sur votre projet puis **Properties** | ||
* Dans la section **Java Build Path**, onglet **Librairies**, choisissez la ligne **Access rules** puis bouton **Edit**. | * Dans la section **Java Build Path**, onglet **Librairies**, choisissez la ligne **Access rules** puis bouton **Edit**. | ||
Ligne 141: | Ligne 136: | ||
* Dans **Resolution**, choisir "//Accessible//" et dans **Rule pattern** mettre //"%%javax/smartcardio/**%%"//. | * Dans **Resolution**, choisir "//Accessible//" et dans **Rule pattern** mettre //"%%javax/smartcardio/**%%"//. | ||
* Enfin valider. | * Enfin valider. | ||
- | Désormais, vos classes sont accessible. | + | Désormais, vos classes sont accessibles. |
- | === Problème de détection des cibles === | + | ==== Problème de détection des cibles ==== |
- | Si votre cible est correctement détecter avec pcsc_scan mais pas avec Java, ceci est du à un [[https://bugs.launchpad.net/ubuntu/+source/sun-java6/+bug/378294|bug]] dans Ubuntu (ou Java au choix). | + | Si votre cible est correctement détectée avec pcsc_scan mais pas avec Java, ceci est du à un [[https://bugs.launchpad.net/ubuntu/+source/sun-java6/+bug/378294|bug]] dans Ubuntu (ou Java au choix). |
Par défaut, l'API Java cherche **libpcsclite.so** dans les dossiers ///usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64//. Cependant, sous Ubuntu, elle se situe dans le dossier ///lib//. | Par défaut, l'API Java cherche **libpcsclite.so** dans les dossiers ///usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64//. Cependant, sous Ubuntu, elle se situe dans le dossier ///lib//. | ||
- | Pour y remédier, plusieurs solutions : | + | Pour y remédier, plusieurs solutions, soit vous copiez la bibliothèque au bon endroit : |
+ | * Sous architecture x86 : <code>sudo ln -s /lib/libpcsclite.so.1 /usr/local/lib/libpcsclite.so</code> | ||
+ | * Sous architecture amd64 : <code>sudo ln -s /lib/libpcsclite.so.1 /usr/local/lib64/libpcsclite.so</code> | ||
- | == Copier la bibliothèque au bon endroit : == | + | Soit vous définissez la librairie à l'exécution du programme : <code java> |
- | + | ||
- | Sous architecture x86 : | + | |
- | <code> | + | |
- | sudo ln -s /lib/libpcsclite.so.1 /usr/local/lib/libpcsclite.so | + | |
- | </code> | + | |
- | + | ||
- | Sous architecture amd64 : | + | |
- | <code> | + | |
- | sudo ln -s /lib/libpcsclite.so.1 /usr/local/lib64/libpcsclite.so | + | |
- | </code> | + | |
- | + | ||
- | == Définir la librairie à l'exécution du programme : == | + | |
- | + | ||
- | <code> | + | |
java -Dsun.security.smartcardio.library=/usr/local/lib/libpcsclite.so TestSmartCardIO | java -Dsun.security.smartcardio.library=/usr/local/lib/libpcsclite.so TestSmartCardIO | ||
</code> | </code> | ||
- | + | Soit vous faites le travail dans le code en recherchant le fichier dans /lib dans le code : <code java> | |
- | == Faire le travail dans le code : == | + | |
- | + | ||
- | Rechercher le fichier dans /lib dans le code : | + | |
- | + | ||
- | <code> | + | |
File libPcscLite = new File("/lib/libpcsclite.so.1"); | File libPcscLite = new File("/lib/libpcsclite.so.1"); | ||
if (libPcscLite.exists()) { | if (libPcscLite.exists()) { | ||
Ligne 179: | Ligne 157: | ||
} | } | ||
</code> | </code> | ||
- | ===== Outils ===== | ||
- | Voici une liste non exhaustive d'outils pour les Smart Cards : | + | SpringCard met à disposition des outils gratuit pour PC/SC sur son site. Notamment un [[http://www.springcard.com/online/applet_pcsc/|applet Java en ligne]] qui permet de tester facilement si ''javax.smartcardio'' fonctionne. |
- | + | ||
- | * Le package **[[apt>pcsc_tools]]** qui contient les outils suivant : | + | |
- | * **pcsc_scan** : un petit script d'exemple qui détecte les périphériques et leurs cartes | + | |
- | * **gscriptor** : un petit logiciel avec interface graphique qui permet d'envoyer des commandes APDU. | + | |
- | * Les outils SpringCard : SpringCard met à disposition des outils gratuit pour PC/SC sur son site | + | |
- | * [[http://www.springcard.com/solutions/pcsc.html|SpringCard PC/SC Quickstart]] : fonctionne sous Windows (mais peut être qu'avec Wine ou Mono...) | + | |
- | * [[http://www.springcard.com/online/applet_pcsc/|Applet Java en ligne]] : permet de tester facilement si javax.smartcardio fonctionne chez vous | + | |
===== Liens externes ===== | ===== Liens externes ===== | ||
- | + | * [[https://wiki.debian.org/fr/Smartcards|liste des cartes reconnues sous debian avec leur pilote respectif]], | |
- | [[http://www.unixgarden.com/index.php/securite/gestion-des-smartcards-sous-linux|Article de Linux Magazine sur les Smart Cards]] | + | * [[http://www.springcard.com/solutions/pcsc.html| Liste d'outils PCSC recensé par SpringCard]]. |
- | [[http://www.springcard.com/solutions/pcsc.html|Liste d'outils PCSC recensé par SpringCard]] | + | |
---- | ---- | ||
- | //Contributeurs :// | + | //Contributeurs : [[:utilisateurs:SaiyanRiku]] ;// |
- | * //[[:utilisateurs:SaiyanRiku]] ;// | + |