Čitanje lične karte bez Java apleta
Opet o apletima
Godina na ovom blogu počela je tekstom „Odzvonilo“ za Java aplete u kome sam pokušao da objasnim zašto je Java apletima, iako je to danas tehnologija na zalasku, omogućen razvoj različitih inovativnih rešenja e-uprave i e-poslovanja.
Programeri su Java apletima obećavali jednostavnu distribuciju malih programčića koji dozvoljavaju pristup kriptografskim uređajima (pametnim karticama i tokenima) koji će raditi u svim popularnim pregledačima i na svim operativnim sistemima gde postoji Java podrška. Od 2006. godine gotovo sve ranije korišćenje komponente (ActiveX, npr. MS CAPICOM) učestalo se menjaju apletima, a klijentske aplikacije menjaju se web rešenjima.
Iako korisnici aplete i ne vole, ko se na primer sreo sa podešavanjem za pristup ISPP+ servisu Uprave za Trezor siguran sam radije će raditi sa 10 apleta nego ovom kombinacijom zastarele klijentske aplikacije, ActiveX kontrole i nevalidnih SSL sertifikata što konačno zahteva „spuštanje sigurnosti na minimum“ i korišćenje starih verzija Windowsa. Samo pogledajte zastrašujuće uputstvo!
Java apleti, kao metoda koja dozvoljava pokretanje programčića na računarima korisnika prirodno predstavlja i sigurnosni rizik. Ne postoji razlika između klika na virus u email poruci i pokretanje zlonamernog apleta sa bilo kog sajta. Zato iz verzije u verziju Jave dodavale su se nove kontrole kojima se ograničava „divlje i slobodno“ pokretanje te od korisnika zahteva da eksplicitno potvrde svoju svesnu želju da pokrenu aplet. Od programera se zahtevalo da poštuju najnovije savete najbolje prakse. Korisnicima treba omogućiti da lako pokrenu pouzdani aplet za pristup e-bankarstvu, ali istovremeno treba onemogućiti pokretanje zlonamernih apleta na drugim sajtovima. Zato aplet mora da bude ispravno potpisan sertifikatom koji je moguće nezavisno proveriti (kako bi korisnici znali da je autor pouzdan), aplet mora da bude isporučen sa obezbeđenih stranica (HTTPS), da se rad omogući samo na određenim stranicama (podaci u manifestu apleta) itd. Ukoliko se to ne isprati, korisnici dobijaju gomilu upozorenja, moraju da isključuju sigurnosne zaštite (čime dovode svoj računar i podatke u opasnost) i ako se u tome ne snađu, na kraju verovatno odustanu od modernog servisa e-uprave.
Drugo obećanje o Java apletima koji rade u svim pregledačima i sistemima takođe ne dolazi automatski. Programeri treba da imaju u vidu specifičnosti svakog sistema i izbegnu da naprave greške zbog kojih bi aplet radio samo na Windowsu. Kod nas poznat primer je aplet za pristup servisu ePorezi Poreske uprave, gde sam još 2014. godine objavio jednostavnu ispravku kako bi aplet radio i na GNU/Linuxu i macOS-u. Autori apleta su isključili podrazumevano učitavanje komponente za rad sa pametnom karticom koje radi svuda, i onda definisali svoju implementaciju, verovatno želeći da olakšaju korišćenje, ali u tome uradili samo podršku za Windows. Pih.
Alternative
Tekst o apletima sa početka godine je završio pričom o alternativama. Na primer za pristup CROSO portalu danas se koristi Java aplikacija koja treba da bude pokrenuta u pozadini. Korisnici najčešće program drže stalno pokrenut, iako je moguće i ručno pokretati i zaustavljati ga pre i nakon rada.
Drugi pristup je veoma sličan, sa razlikom da pokretanje i gašenje aplikacije možemo da prepustimo samom veb pregledaču. Instalirani dodatak (engl. Add-on) ili ekstenzija tada može da obezbedi taj dodatni pristup veb stranici kako bi se razmenili podaci sa čitačem kartica. Ipak izrada posebnih ekstenzija za svaki browser i operativni sistem nije isplativo rešenje.
Google Chrome, Mozilla Firefox, Opera, Microsoft Edge postepeno usvajaju zajedničku specifikaciju za web ekstenzije (WebExtensions) gde jedan njen deo Native Messaging omogućava upravo saradnju veb stranice (sajta), ekstenzije i programčeta u pozadini.
Korisniku se nudi instalacioni paket za odgovarajući operativni sistem koji sadrži programče. Instalacijom programče postaje dostupno pregledaču, ali se ne pokreće automatski. Instalacioni paket postavlja i dodatak/ekstenziju koja će obezbediti dodatnu funkcionalnost jednom ili svim sajtovima koji imaju potrebu da je koriste.
Native Messaging ekstenzija za čitanje lične karte
Kao proof-of-concept, razvio sam kod ekstenzije koja koristi raniju Java biblioteku JFreesteel za čitanje lične karte (open-source kod ove biblioteke programeri koriste u većem broju sistema za brzi unos podataka i podršku prodaji, softveru za osiguranje, platne usluge, ali i na portalu eUprava).
Kada je instalirana ekstenzija se prikazuje u Google Chrome browseru:
Programče za podršku i odgovarajući Native Messaging manifest su instalirani posebno.
Ekstenzija se sastoji od content skripte koja je dostupna svim veb stranicama i deljene background skripte. Uloga background skripte je da upravlja kanalima za komunikaciju sa pratećim programom (svaki tab dobija posebnu instancu programčeta i kanal za komunikaciju) i prosleđuje podatke između programčeta i content skripte.
Ekstenzija ne radi ništa sve dok korisnik ne poseti stranicu koja želi da pristupi čitaču i pročita ličnu kartu.
Učitavanjem testne veb stranice najpre se kreiraju kanali za komunikaciju, a zatim se u pozadini pokreće programče za čitanje lične karte. Ubacivanjem kartice u čitač, podaci postaju dostupni u veb stranici koja je inicirala čitanje. Moguće je koristiti više čitača i vršiti više očitavanja, zavisno od potreba veb aplikacije.
Napuštanjem stranice zatvaraju se kanali za komunikaciju, i zaustavlja prateće programče iz pozadine.
Kod je kao i JFreesteel biblioteka dostupan na GitHubu pod GNU LGPLv3 licencom koja dozvoljava i komercijalno korišćenje (uz određene uslove vezane za objavljivanje unapređenja same biblioteke).
U pitanju je proof-of-concept namenjen programerima.
Za korišćenje u gotovom rešenju neophodno je razraditi pakovanje i distribuciju pratećeg programčeta (instalacioni paket sa sistemskom ili korisničkom instalacijom) za različite operativne sisteme, objavljivanje ekstenzije i njenu doradu kako bi pružila informacije i pomoć korisniku u vezi instalacije pratećeg programčeta. Potrebno je i dodatno ograničiti rad ekstenzije na samo određenim sajtovima (sajt usluge za koju se implementira čitanje lične karte) ili u slučaju da je ekstenzija dostupna na svim sajtovima, dodati opciju korisniku da ovlasti ili spreči čitanje dokumenta na određenom sajtu.
Ekstenzija trenutno radi samo u Google Chromu, ali podrška za tehnologiju postoji i u drugim pomenutim browserima. Razvoj ovakvog rešenja je nužno kompleksniji od Java apleta, ali korisnički doživljaj može biti na uporedivom nivou.
U odnosu na klijentsku aplikaciju (kako to radi CROSO), ima nešto više posla, ali se postiže bolja spregnutost browsera i pratećeg programčeta, te izbegavaju eventualni problemi sa lokalnim mrežnim postavkama i zaštitama, te CORS restrikcijama. Na primer, neće vam trebati saradljivo serifikaciono telo (PKS CA) da izda CN=localhost SSL web sertifikat i ne opozove ga iako privatni ključ podelite javno kao deo instalacije.
WebExtensions Native Messaging API
Nastao je u Google Chromu kao rešenje nakon prestanka podrške za NPAPI (Netscape Plugin API) tokom 2015. godine. API je podržan i od Mozilla Firefoxa verzije 50, a čeka se na prvu objavu u Microsoft Edge pregledaču. Opera takođe podržava ovaj API, dok Safari nije podržan i zahtevao bi neko alternativno rešenje.
Mobilne platforme nisu podržane.
Tehnologija omogućava podršku za sve operativne sisteme, ali je za svaki potrebno napraviti instalacioni paket koji će postaviti prateću aplikaciju i manifest kojim se ista registruje u veb pregledaču.