2008年3月15日

Linux 晶片卡讀卡機 使用心得

本篇po在摩托學園『五月天為了報稅安裝讀卡機』的回文,一樣是我po的,所以現在就另外貼在自己的blog上。

晶片卡和晶片卡讀卡機很重要,現在webATM盛行,一些銀行的webATM轉帳還比較便宜,晶片卡也能拿來報稅,如果Linux也能使用,那是非常棒的事情。

可惜目前在Linux上,還是無法使用晶片卡來進行報稅或webATM,主要原因是軟體幾乎都是針對Windows寫的,並沒有針對Linux寫,因此儘管Linux上的讀卡機有驅動程式,可以讀到卡片,但是仍然無法使用。

目前就我最近查到的,在wine-dev的mail-list中,2008-03(現在) ,已經有人開始針對WINE上smartcard相關的service和.dll撰寫中,雖然目的不清楚(看發文的工程師,公司title是做security方面的),但有在寫總是比較好的,至少有進步了。
不過看討論,他們目前還只是在作變數的對應,功能性的function應該都還沒動,路~還長著呢~~

下面是我針對晶片卡讀卡機在Linux(Ubuntu,但我認為Debian應該也是)下的設定、使用方式。
針對的是『Castles 虹堡 EZ-100PU』,該公司其他幾款共用Driver的,也都能夠使用。
而這麼大手筆打它廣告,並不是因為我跟公司有利益關係,而是目前我只知道他有提供Linux Driver,如果其他公司的晶片卡讀卡機有提供Linux Driver,我不小心剛好有機會用到,我會再修正它,但是現階段,就是在幫他打廣告沒錯。

1. pcsc-lite 套件不需要這麼辛苦的安裝,套件庫裡面已經有了
apt-get install pcsc-tools pcscd

雖然PC/SC Lite在套件庫中已經有了,但是『EZ100PU/EZMINI/PISCES系列的驅動程式』仍舊需要,因此要到『虹堡科技股份有限公司』的網站下載Linux Driver,我們只需要裡面的『ezusb.so

2. ezusb.so 建議複製到『/usr/lib/pcsc/drivers/ezusb.so』,PC/SC Reader的驅動程式都放在這裡

3. 設定檔的部分要修改
新增檔案『/etc/reader.conf.d/libezusb

內容>如下:
FRIENDLYNAME "CASTLES EZ100PU"
DEVICENAME /dev/null
LIBPATH /usr/lib/pcsc/drivers/ezusb.so
CHANNELID 0x000000


這邊要稍微注意的是,『DEVICENAME 不再是 CAS_SMART_RDR』,要改為『/dev/null』。
這應該是因為我們這台是USB的關係,看其他設定檔,都是指定為『/dev/ttyS?』。

接下來以root執行
update-reader.conf

它就會自動更新到『/etc/reader.conf』了。

4. 關於插入讀卡機之後要重新開機的問題,不用麻煩~
只需要把 pcscd 重跑即可,如下:
/etc/init.d/pcscd restart

5. 要知道目前讀卡機有沒有抓到,卡片有沒有插入,可以使用『pcsc_scan』這個程式。

我的/var/log/message訊息如下:
Mar 8 15:16:46 ycfu kernel: [12204.451952] usb 4-2: new full speed USB device using uhci_hcd and address 7
Mar 8 15:16:46 ycfu kernel: [12204.629079] usb 4-2: configuration #1 chosen from 1 choice
(插入讀卡機後,執行/etc/init.d/pcscd start)
Mar 8 15:16:58 ycfu pcscd: readerfactory.c:1113:RFInitializeReader() Attempting startup of CASTLES EZ100PU 00 00 using /usr/lib/pcsc/drivers/ezusb.so
Mar 8 15:16:58 ycfu pcscd: readerfactory.c:946:RFBindFunctions() Loading IFD Handler 2.0
Mar 8 15:16:58 ycfu pcscd: pcscdaemon.c:507:main() pcsc-lite 1.4.3 daemon ready.
Mar 8 15:16:58 ycfu pcscd: hotplug_libusb.c:401:HPEstablishUSBNotifications() Driver ifd-etoken.bundle does not support IFD_GENERATE_HOTPLUG
Mar 8 15:16:58 ycfu pcscd: hotplug_libusb.c:410:HPEstablishUSBNotifications() Polling forced every 1 second(s)


執行pcsc_scan後如下:
ycfu [/etc] -ycfu- pcsc_scan
PC/SC device scanner
V 1.4.9 (c) 2001-2006, Ludovic Rousseau
Compiled with PC/SC lite version: 1.4.2
Scanning present readers
0: CASTLES EZ100PU 00 00

Sat Mar 8 15:18:06 2008
Reader 0: CASTLES EZ100PU 00 00
Card state: Card removed,
(插入郵局提款卡之後)

Sat Mar 8 15:18:29 2008
Reader 0: CASTLES EZ100PU 00 00
Card state: Card inserted,
ATR: 3B F7 11 00 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ATR: 3B F7 11 00 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ TS = xx --> Direct Convention
+ T0 = xx, Y(1): xxxx, K: x (historical bytes)
.......


6. 我用WINE執行IE,然後連線到郵局的webatm,它的.ocx元件我能夠下載下來,也能夠透過wine的regsvr32.exe註冊到WINE系統裡。
進入webatm.post.gov.tw之後,他不會顯示元件尚未下載(看起來已經成功註冊到WINE了),但是會顯示『找不到讀卡機』。
目前看起來,Linux的Reader有成功跑起來,網路郵局的元件有有跑起來,但是WINE似乎缺少Reader的wrapper,所以目前仍舊沒辦法用讀卡機在網路郵局轉帳...

7 則留言:

Victe.L 提到...

也許web ATM使用的技術能支援非IE瀏覽器,這個問題會更容易些?

之前看過討論,好像有人指出,香港與台灣同一間銀行,但是香港web ATM許多是Firefox也能用的,如果真的是這樣,台灣這邊的銀行確實需要努力。不過我沒辦法證實這點,因為我沒香港的帳戶XDD

Make 提到...

Gemplus這家的記得也有linux driver

顯示找不到讀卡機應該是缺了SmartCard Service吧
XP裡面把SmartCard Service關掉也是同樣狀況

阿呆 提到...

make說的完全正確。
所以說,WINE要能夠支援webATM,路還很長,目前還在定義相關變數,之後要做SmartCard Service的Wrapper,並對應到Linux的Card Reader,想到都覺得很難~

匿名 提到...

我不就是帥氣的肥羊....不過你可以把他弄到linux上~頗屌滴

匿名 提到...

感謝大大本篇精彩的說明
想請教您兩個問題
1.什麼是『pcsc_scan』程式?
2.『DEVICENAME 不再是CAS_SMART_RDR』,要改為『/dev/null』。
虹堡安裝說明裡面是用CAS_SMART_RDR,大大建議是用/dev/null,請問會根據機器或環境不同而有差異嗎?還是虹堡寫錯了?

謝謝

阿呆 提到...

1. pcsc_scan 是 pcsc_lite 套件中的一個執行程式,它的主要功能,是週期性的掃描所有機器上可以用的讀卡機,並且把讀卡機和卡片訊息顯示出來。
2. DEVICENAME 這個參數,是當讀卡機是串列埠介面時,用來指定讀卡機裝置用的,所以通常都像/dev/ttyS0這樣。
可是當讀卡機是USB時怎麼辦?如何指定?就是直接使用/dev/null即可。
這參數怎麼來的?這是參考pcsc_lite提供的example改的。

虹堡提供的程式,其實也是pcsc_lite,不過是舊的版本,我認為可能是版本的差異,所以舊版需要指定DEVICENAME,新版不用。
那既然這樣,要根據誰的方式設定?
簡單的說,我們安裝pcsc_lite後,全部的設定都參考pcsc_lite,虹堡的整個Linux程式中,我們只需要ezusb.so,虹堡其餘部份都不用管。

islam 提到...

I use the same model of smart card reader. Sadly, it can only work fine on windows box, but it shows the following messages on my ubuntu 8.10 Linux box.

Any idea? ;-P

http://rafb.net/p/ryMsWP42.html