Monday, November 19, 2012

Rechargement du passe navigo sous linux


Il y a peu de temps, j'ai reçu un email de la RATP me disant que j'avais été sélectionné pour participer à la phase de test du rechargement de passe navigo directement sur son ordinateur. J'ai gratuitement reçu un lecteur de cartes à puce, mais des lecteurs de type Gemalto ou autres fonctionnent aussi (et ne coute qu'une dizaine d'euros sur ebay !)
Malheureusement, en se connectant sur le site rechargercommandernavigo.fr, mon système d'exploitation n'est pas supporté. Et pour cause, seul Windows et MacOS sont supportés. Que se passe-t-il en changeant mon user-agent ? La configuration a l'air d'être bonne ! En cliquant sur continuer, ça coince un peu. Message d'erreur, mon lecteur n'est pas connecté. Dommage, ça aurait pu fonctionner. Mais il est hors de question que je baisse les bras.

Reverse-engineering

Si les pré-requis sont bons, il doit y avoir un applet java qui se cache dans ma page. Effectivement :

<iframe id="applet" src="applet.jsp" width="1px" height="1px" frameborder="0"></iframe>

A priori, le javascript situé dans carte.js communique avec l'applet, qui communique avec le lecteur de cartes.

Et si on décompilait le jar (RITMxAppletCardClient.jar) ? En utilisant l'excellent JD-GUI, j'ai appris que l'API utilisée pour communiquer est javax.smartcardio. Vraisemblablement, le problème se situe sur mon système. En utilisant le code de l'applet (qui d'ailleurs est très proche des exemples de code pour SmartCardIO) suivant et en le compilant :
      TerminalFactory factory = TerminalFactory.getDefault();
      List terminals = factory.terminals().list();

      for (CardTerminal aTerminal : terminals)
      {
        System.out.println(aTerminal);
      }

Je me rends compte qu'aucun lecteur n'est détecté. Je cherche dans la documentation de SmartCardIO ce qu'il me manque : les librairies pour accéder au lecteur de carte !

Installation de PC/SC

J'installe via pacman (pour ArchLinux) :   pcsc-tools et pcsclite (ou pour ubuntu, pcscd libpcsclite1 pcsc-tools). Il faut ensuite lancer le démon pcscd, et vérifier avec pcsc_scan que le lecteur est correctement détecté.

PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau 
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers...
0: Alcor Micro SCR001 00 00

Mon Nov 19 16:48:52 2012
Reader 0: Alcor Micro SCR001 00 00
  Card state: Card removed, 

Mon Nov 19 16:48:56 2012
Reader 0: Alcor Micro SCR001 00 00
  Card state: Card inserted, 
  ATR: 3B XX XX XX XX

ATR: 3B 6F XX XX ...
+ TS = 3B --> Direct Convention
+ T0 = 6F, Y(1): 0110, K: 15 (historical bytes)
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 80 XX XX XX XX 
  Category indicator byte: 80 (compact TLV data object)
    Tag: 5, len: A (card issuer's data)
      Card issuer data: 08 XX XX XX 
    Tag: 8, len: 2 (status indicator)
      SW: 9000

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
..
3B 6F 00 00 80 5A .. 0[1-5] .. .. .. .. .. .. .. .. 82 90 00
 Card supporting a Calypso application Rev 1
 Typically: French "Navigo" transport card

En revanche, l'applet ne fonctionne toujours pas ! C'est un bug connu dans les distributions (ou dans java, tout dépend du point de vue !), qui va chercher les librairies au mauvais endroit :
SunPCSC accesses the PC/SC stack via the libpcsclite.so library. It looks for this library in the directories /usr/$LIBISA and /usr/local/$LIBISA, where $LIBISA is expanded to lib on 32-bit platforms, lib/64 on 64-bit Solaris platforms, and lib64 on 64-bit Linux platforms.
 Il ne reste plus qu'à trouver la librairie libpcsclite.so et faire un lien symbolique au bon endroit. Pour Archlinux :


$ sudo mkdir /usr/local/lib64
$ cd /usr/local/lib64
$ sudo ln -s /usr/lib/libpcsclite.so.1 libpcsclite.so


Retour sur le site navigo : 




7 comments:

  1. bonjour,
    pour les novices, est ce qu'il y a un mode d'emploi abrégé et plus compréhensible ? J'ai linux sur mon pc HP et un chargeur navigo sans savoir quoi en faire finalement...
    Merci d'avance !

    ReplyDelete
  2. Hello,

    Mon article était plus un "proof of concept" pour signaler que la Ratp aurait aussi pu fournir le support de linux assez facilement.

    Ca m'a en plus permis de comprendre comment fonctionne les smartcards dans java. Mais au final, c'est beaucoup de bidouille pour recharger, et du coup, j'utilise mon mac :)

    Donc une méthode pour les novices, a part installer windows...

    ReplyDelete
  3. Salut, la méthode du user agent switch n'a plus l'air de fonctionner sur le nouveau site rechargercommandernavigo.fr ? Une idée?

    En revanche mon lecteur Alcor Micro AU9520 est bien reconnu mais j'ai du installer les dernières versions de pcsc, celles fourni pour Ubuntu 12.04 sont obsolètes (depuis http://packages.debian.org/wheezy/ )

    ReplyDelete
  4. Trop top, merci ! Effectivement rien d'insurmontable. Je n'ai pas vérifié si le lien symbolique était réellement nécessaire, je l'ai créé sans trop me poser de questions.
    Pour info, par rapport au commentaire d'au dessus, je n'ai eu aucun souci sous chromium avec l'extension "chromium UA spoofer"

    testé sous Debian wheezy

    ReplyDelete
  5. How to make money from online casino games
    Online casino bonuses and promotions There are a variety หาเงินออนไลน์ of different 1xbet korean bonuses offered to help you deccasino win money online and in real money. You can get

    ReplyDelete
  6. No Deposit Bonus Casinos 2021 - Win Real Money at US
    We list https://vannienailor4166blog.blogspot.com/ 10 best online gri-go.com casinos https://jancasino.com/review/merit-casino/ with no deposit bonuses in the US. Find wooricasinos.info the best USA no deposit bonus codes and get your free spins

    ReplyDelete