UPDATE: A K&H végleg feladta. Az újabb Firefoxokkal már jó ideje nem működött a chipkártyás belépés natív Windows esetén sem, sőt a Google Chrome is csak szorgos F5 nyomkodás után vette észre az olvasót, első betöltődéskor még nem látta azt, így a többség vélhetően már csak MS IE alól használta. A bank 2018.07.20. dátummal kivezeti a chipkártyás bejelentkezés lehetőségét. Mivel a várakozásaimmal ellentétben a K&H megújult netbankja ezen a téren nem hozott változást, ezért úgy döntöttem, hogy kicsit beleásom magam a dologba, és megpróbálom a chipkártyás azonosítást Ubuntu 12.04 LTS alatt szóra bírni. A K&H e-bankhoz OmniKey CardMan 3121 kártyaolvasót, és Oberthur AuthentIC v5 smartcardot adtak. A chipkártya kezeléséhez Linux alatt a pcsc programcsomag szükséges, ez alapból fel is ismeri az olvasót, és a kártyát is tudja kezelni, de a beépített driver időnként elveszti vele a kapcsolatot, és ilyenkor újra kell csatlakoztatni. Szerencsére a gyártó - a bankkal ellentétben - felkészült mindenféle oprendszerre, így Linux alá is elérhetőek pcsc kiegészítő driverek: 32 bit: http://www.hidglobal.com/drivers?field_brand_tid=24&product_id=3950&os=185 64 bit: http://www.hidglobal.com/drivers?field_brand_tid=24&product_id=3950&os=2170 ezt hozzáadva már kellően stabil a kapcsolat a kártyával. A következő lépés az opensc használata, mellyel konkrétabb műveleteket is tudunk a kártyával végezni. Lehet olvasni a fájlrendszerét, lépkedni a könyvtárakban és fájlokat le is lehet tölteni róla, valamint bizonyos fájlok olvasásánál pin kódot is kér, itt a banktól kapottat megadva engedi a hozzáférést, tehát jó úton haladunk. Így deríthető ki a kártya pontos típusa, valamint, megtalálható rajta a K&H-s tanúsítvány is, mely lejárata egybeesik a kártyára nyomtatott lejárattal. Ehhez egyetlen trükköt kellett még bevetni, a /etc/opensc/opensc.conf fájlban alapértelmezett oberthur drivert kellett neki beállítani (force_card_driver = oberthur), másképp nem ismerte meg a kártyát (adott kártyára ugyanezt egyedileg is meg lehetne tenni az ATR alapján, de az egyszerűség végett globálisan állítottam be). Az eddigiek dióhéjban:
$ lsusb | grep OmniKey
Bus 003 Device 002: ID 076b:3021 OmniKey AG CardMan 3121
$ sudo apt-get install pcscd:i386 pcsc-tools:i386 opensc
$ pcsc_scan
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: OMNIKEY CardMan (076B:3021) 3021 00 00
Thu Oct 17 00:06:16 2013
Reader 0: OMNIKEY CardMan (076B:3021) 3021 00 00
Card state: Card inserted,
ATR: 3B 5B 96 00 00 31 C0 64 C7 FC 10 00 01 90 00
ATR: 3B 5B 96 00 00 31 C0 64 C7 FC 10 00 01 90 00
+ TS = 3B --> Direct Convention
+ T0 = 5B, Y(1): 0101, K: 11 (historical bytes)
TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 31 C0 64 C7 FC 10 00 01 90 00
Category indicator byte: 00 (compact TLV data object)
Tag: 3, len: 1 (card service data byte)
Card service data byte: C0
- Application selection: by full DF name
- Application selection: by partial DF name
- EF.DIR and EF.ATR access services: by GET RECORD(s) command
- Card with MF
Tag: 6, len: 4 (pre-issuing data)
Data: C7 FC 10 00
Mandatory status indicator (3 last bytes)
LCS (life card cycle): 01 (Creation state)
SW: 9000 (Normal processing.)
$ opensc-explorer -v
OpenSC Explorer version 0.13.0
Using reader with a card: OMNIKEY CardMan (076B:3021) 3021 00 00
OpenSC [3F00]>
OpenSC [3F00]> cd 5011
OpenSC [3F00/5011]> cd 9001
OpenSC [3F00/5011/9001]> get 2000 2000
Total of 729 bytes read from 2000 and saved to 2000.
OpenSC [3F00/5011/9001]> cd ..
OpenSC [3F00/5011]> cd 9002
OpenSC [3F00/5011/9002]> cat 3100
read failed: Security status not satisfied
ACL for operation: CHV129
OpenSC [3F00/5011/9002]> verify CHV129
Please enter PIN:
Code correct.
$ openssl x509 -in 2000 -inform der -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: xxx
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=K&H Bank Zrt., C=HU, CN=KHB eBank card CA
Validity
Not Before: Jan 10 04:12:46 2011 GMT
Not After : Jan 31 21:59:59 2014 GMT
Subject: C=hu, O=khb, L=xxx, CN=xxx
...
A következő szint az opensc pkcs eszközei lennének, de ezek nem ismerik
meg a kártyán kialakított szerkezetet, és nem hajlandóak a tanúsítvány- és kulcskezelést elvégezni, így ez zsákutcának tűnik (mellesleg ez nyitná meg az utat a böngésző tanúsítványkezelőjéhez). A Windowsos fájlokat ellenőrizve gyorsan kiderül, hogy az e-bank a winscard.dll-t használja, melynek Linuxos megfelelője a pcsc tehát az opensc-re itt valószínűleg nem lesz szükségünk.
Ez alapján egyből adódik is a következő probléma: szuper, hogy a K&H e-bank támogatja a Firefox böngészőt saját pluginnal, de szegény Ubuntu a pluginban lévő dll-lel nem sokat tud kezdeni, nyilván csak pislog, mint hal a szatyorban. Maga a dll csak egy wrapper, mely tovább hívja az e-bank kártyakezelő natív felületeit (pin kód bekérés, tranzakció aláírás, stb.), amely az e-bank Windowsos telepítőjével került a rendszerre, így hiába működne a kártya kezelése, az említett függőségek miatt az e-bankot akkor sem lehetne használni.
Ilyen könnyen nem adjuk fel, némi borozgatás után jön is az ihlet :), hogy akkor wine kell ide, és azzal majd biztosan menni fog. Ez így ebben a formában végül is igaz, de a helyzet ennyire nem egyszerű. A jelenleg elérhető wine verziókban a winscard szolgáltatások nincsenek implementálva, de úgy tűnik, ez már másoknak is hiányzott, ezért elkészítették hozzá, csak valamilyen érthetetlen okból kifolyólag évek óta nem kerül bele a hivatalos wine-ba, ezért külön kell utólag telepíteni:
https://www.winehq.org/pipermail/wine-devel/2007-April/056432.html
http://sourceforge.net/projects/scard4wine
https://github.com/idrassi/SCard4Wine
http://sourceforge.net/projects/scard4wine/files/1.1.0/winscard-linux.tar.gz/download
Előtte próbálkozhatunk frissebb wine verziókkal is, mivel stabilabbak és jóval gyorsabbak is, mint az alapértelmezetten elérhető 1.4-es változat:
http://www.winehq.org/download/ubuntu
Ha ezzel meg vagyunk, akkor telepíthetjük is a K&H Windowsos e-bank programját, mely a wine-nak köszönhetően elindul, majd az ellenőrzést áttekintve örömmel konstatálhatjuk, hogy a winscard kiegészítésnek köszönhetően a sok piros x-ből néhány zöld pipára változott, de ez nekünk pont elég lesz:
http://kepfeltoltes.hu/view/131128/kh_ebankchk_www.kepfeltoltes.hu_.png
Már csak egy dolog van hátra, a Firefox és e-bank plugin telepítése wine alá, itt jön még egy csavar a dologba: az említett 12.04 LTS Ubuntuban lévő wine kissé érzékeny az újabb kiadású Firefoxokra (talán túl gyorsan változik mostanság), és tapasztalataim szerint egészen FF 23-ig vissza kell lépni, mert e verzió fölött a FF indításkor elszáll (ez az infó valószínűleg már elavult). Ha meg vagyunk a plugin telepítésével, akkor megkísérelhetünk belépni a netbank felületén, és ha mindent jól csináltunk, akkor a következő kép fogad bennünket:
http://kepfeltoltes.hu/view/131128/kh_pin_www.kepfeltoltes.hu_.png
Hallelujah! :)
Összefoglalásképp a következők kellenek hozzá:
- pcscd csomag telepítése
- kártyaolvasónak megfelelő pcsc driver telepítése
- wine telepítése
- winscard wine kiegészítés telepítése
- e-bank telepítése wine alatt
- Firefox telepítése wine alatt
- e-bank plugin telepítése Firefoxban wine alatt
- dash ikon Ubuntuhoz: http://kepfeltoltes.hu/view/131129/kh_kerek_www.kepfeltoltes.hu_.png
- wine ikon eltüntetéséhez a következő értéket kell felvenni az indító .desktop fájlba: StartupWMClass=firefox.exe
#!/bin/bash
#
# khb-install.sh
#
# v0.2 k.joe@freemail.hu
#
tmp=/tmp/khb
[ "$(uname -m)" == "x86_64" ] && arch=:i386
mkdir $tmp 2>/dev/null
cd $tmp
# pcsc csomagok
sudo apt-get install wine pcscd$arch pcsc-tools$arch
# dash ikon
wget -O - "http://kepfeltoltes.hu/131129/kh_kerek_www.kepfeltoltes.hu_.png" > $(ls -d ~/{Képek,Pictures}/ 2>/dev/null)/kh_ebank.png
# omnikey pcsc driver
wget -O - http://www.hidglobal.com/node/21277 | tar xfz -
cd ifdokccid*/
sudo ./install
cd ..
# wine winscard
wget -O - http://sourceforge.net/projects/scard4wine/files/1.1.0/winscard-linux.tar.gz/download | tar xfz -
sudo ./install.sh
# wine khb ebank
wget https://ebank.khb.hu/publish/ebank/hu/hu_gy_jtemenyek/media/ebank2_setup_143.download.exe
wine ./ebank2*.exe
# wine firefox
ff=http://download-installer.cdn.mozilla.net/pub/firefox/releases/latest/win32/hu/
wget "$ff$(wget -O - $ff | grep -Eo "Firefox Setup [0-9.]+.exe" | head -n 1)"
wine ./Firefox*.exe
# wine ebank plugin
wget https://ebank.khb.hu/publish/ebank/en/en_gy_jtemenyek/media/npebank2_xpi_Firefox_10.download.xpi
wine "$(ls ~/.wine/drive_c/Program\ Files*/Mozilla\ Firefox/firefox.exe | sed 's,^.*/Program ,C:/Program ,;s,/,\\\\,g')" npebank2*.xpi