Zvanična klijentska aplikacija Poreske uprave se može preuzeti sa njihove stranice.
U pitanju je Java aplikacija koja dolazi sa posebno priređenom distribucijom Oracle Java radnog okruženja. Aplikacija podržava samo Microsoft Windows operativni sistem i sertifikatima u Personals skladištu pristupa kroz Microsoft CryptoAPI koji poziva operacije na pametnoj kartici ili tokenu posredstvom midlvera.
Sertifikaciono telo Pošte korisnicima nudi SafeSign midlver, osim u verziji za Windows i u verziji za GNU/Linux i macOS operativne sisteme. Midlver isporučuje prateću aplikaciju za upravljanje karticom/tokenom i PKCS#11 biblioteku. Programi poput jSignPDF, Adobe Reader ili LibreOffice mogu da učitaju ovu biblioteku i omoguće korisniku elektronsko potpisivanje dokumenata.
Elektronsko potpisivanje se koristi i na portalu ePorezi Poreske uprave, posredstvom pomenute klijentske aplikacije.
Da bi klijentsku aplikaciju mogli da koristimo na macOS-u moramo da je naučimo da kartici/tokenu umesto kroz Microsoft CryptoAPI pristupa kroz SafeSign PKCS#11 modul. Minimalno (nezvanično) prerađena verzija ePorezi 1.0 tako da umesto MS CAPI koristi PKCS#11 sa odgovarajućim putanjama midlvera prema podrazumevanoj instalaciji na macOS-u se može preuzeti sa:
http://goranrakic.com/tmp/ePorezi_1.1_mac.zip
Prepravljena verzija nije podržana od strane Poreske uprave. Napravljena je isključivo u najboljoj nameri, sa željom da se i korisnicima macOS-a omogući pristup portalu. Izmene menjaju isključivo deo aplikacije koji je okrenut ka kartici, bez izmena u kodu koji je okrenut ka portalu. Za pristup kartici izmenjena aplikacija koristi isključivo postojeće PKCS#11 biblioteke i ne bi trebalo da dovede do oštećenja ili neočekivanog blokiranja kartice (kartica će biti blokirana u slučaju da korisnik više puta unese pogrešan PIN kod, što je podrazumevano ponašanje). Ipak napisano ne predstavlja garanciju i ovu nepodržanu i prepravljenu verziju koristite isključivo na svoju odgovornost.
Klijentska aplikacija je minimalno izmenjena, samo koliko je bilo neophodno za učitavanje PKCS#11 modula. U slučaju greški aplikacija će "zakucati" ili "pući", i jedino u log zapisu ili eventualnom ispisu u terminalu možete da naslutite šta je problem. Ovakvo prepravljanje gotove aplikacije kada izvorni kod nije dostupan nije jednostavno i postoje ograničene mogućnosti za dodavanje nove funkcionalnosti. Verovatno bi bilo lakše i praktičnije napraviti novu alternativnu aplikaciju, koja bi mogla da izgleda i ovako.
Na macOS-u nakon svakog uspešnog potpisivanja prikazuje se greška o padu programa. Aplikacija bi u tom trenutku trebalo da se tiho zatvori, međutim pri izlasku dolazi do neogovarajućeg pristupa (EXC_BAD_ACCESS). Pretpostavljam da je problem u zaostaloj niti ili resursu koji je potrebno osloboditi, međutim to ostaje u delu aplikacije koji ne mogu ili ne znam kako da prepravim (patchujem).
Osim Sertifikacionog tela Pošte, moguće da i druga sertifikaciona tela imaju dostupan PKCS#11 modul za macOS (npr. NexusPersonal za Halcom ili NetSet CardEdge za PKS/MUP).
2023 Update for Halcom and ARM:
Update drivers for IDBridge via official site:
https://supportportal.gemalto.com/csm/?sys_kb_id=fd704ab21bd53d1019913035464bcb30&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=6516ec161ba9f9103112a827bd4bcb60&sysparm_article=KB0027738
macOS Big Sur and newer have changed path of PCSC, so we need to set up it manually:
https://stackoverflow.com/questions/64995956/problem-with-big-sur-11-0-1-and-pc-sc-library
In a nutshell, we need to modify source code like this (in SmartBox.java, for example):
or launch jar inside the macOS app with argument via terminal:
libtokenapi.dylib
works only on x86_64, so launch it via Rosetta: download JDK 8 for x86_64, so macOS launch JVM via Rosetta and JAR will execute dylib for x86_64. If you see errors like:Private keys must be instance of RSAPrivate(Crt)Key or have PKCS#8 encoding...
try to download older version of JDK.
I have downloaded 8u262 for x86_64 from here:
https://www.openlogic.com/openjdk-downloads?field_java_parent_version_target_id=416&field_operating_system_target_id=431&field_architecture_target_id=391&field_java_package_target_id=396
P.S. I have IDBridge K30 USB. I use Intelij IDEA for modifying sources and managing JVMs.