Skip to content

Instantly share code, notes, and snippets.

@grakic
Last active April 2, 2024 13:27
Show Gist options
  • Star 31 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grakic/9a850411c3b9294ff0c226e4f914be35 to your computer and use it in GitHub Desktop.
Save grakic/9a850411c3b9294ff0c226e4f914be35 to your computer and use it in GitHub Desktop.
ePorezi na macOS

ePorezi na macOS

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).

@salemax
Copy link

salemax commented Apr 27, 2023

Ne mogu nikako da podesim mac da radi sa poštinim sertifikatom na eporezi.
Screenshot 2023-04-27 at 10 52 01
Probao sam sve dostupne verzije, sve kombinacije i svaki put dobijam istu gresku. Probao sam i na dva razlicita MacBook: M1 pro sa Ventura 13.3.1 i Intel sa Big Sur 11.7.4.
U tokenadminu se vidi kartica, deluje da je problem izmedju app i middleware.

@dusanipb
Copy link

Nadam se da će nekom od developera ovo biti od pomoći: OpenSerbianEID/ePorezi#9

@di-rex
Copy link

di-rex commented May 4, 2023

Kod mene nakon prepoznavanja citaca i kartice, nakon klika na Prijavu ili Testno okruzenje, nista se ne desava 🤷‍♂️

@mperovic
Copy link

mperovic commented May 8, 2023

@di-rex i kod mene verzija 1.2.2-6 ima isti problem, pa sam morao da se vratim na prethodnu verziju.

@Kasokaso
Copy link

Kasokaso commented May 10, 2023

Da li i vama baca sledecu poruku pri pokusaju potpisivanja:
There is no application set to open the URL eporezi:// ...

Izgleda da se svaki put nakon ucitanog pina i otvaranja browsera app ugasi. Da li je imao neko slican problem?

edit: ova poslednja verzija uopste nece da otvori dijalog za logovanje na (ventura 13.3). Ostale verzije uspeju da se ulogujes ali nakon toga pucaju
Resenje za pucanje aplikacije prilikom potpisivanja: Kliknuti par puta na "potpisi" i onda se otvori normalno dijalog za potpisivanje dokumenta.

@marsicdev
Copy link

Predlog: Ako neko zna kako ovo funkcionise nek napise neku tehnicku specifikaciju da napravimo neko normalno resenje za macOS ili multiplatform i da se resimo ove patnje sa svakom novom OS verzijom.

@najdanovicivan
Copy link

@marsicdev

Predlog: Ako neko zna kako ovo funkcionise nek napise neku tehnicku specifikaciju da napravimo neko normalno resenje za macOS ili multiplatform i da se resimo ove patnje sa svakom novom OS verzijom.

Problem su ti PKCS11 wrapper biblioteke. Svaka kartica koristi razlicite bibloteke. Najveci problem je TrustEdgeID (licne karte) za njih postoje samo biblioteke za windows. Postoji X86 64bit verzija za OSX i X86 32-bit verzija za Linux. Nigde traga oda ARM varijante.

Ja sam za da se napravi OpenSoruce multi platform aplikajia koja bi radila sve (NexU, ePorezi, Croso...) samo je problem na čemu je razvijati. Ovde je za sve uglavnom koriscena Java 8 jer ona je poslednja koja ima SUN PKCS11 biblioteke. Ali toliko stara verzija jave ima sama po sebi probleme sa tipa universal links

Raditi varijantu native MacOS app sa Swift/Objective-C bi zahtevalo morao da se napise wrapper za CryptoTokenKit ili da se radi direktno za C bibliotekom. Obe obcije su veoma komplikovane.

Po meni mozda najbolje je uraditi applikaciju u Qt Framework-u ali opet ista prica sa bibliotekom na niskom c nivou

@marsicdev
Copy link

@marsicdev

Predlog: Ako neko zna kako ovo funkcionise nek napise neku tehnicku specifikaciju da napravimo neko normalno resenje za macOS ili multiplatform i da se resimo ove patnje sa svakom novom OS verzijom.

Problem su ti PKCS11 wrapper biblioteke. Svaka kartica koristi razlicite bibloteke. Najveci problem je TrustEdgeID (licne karte) za njih postoje samo biblioteke za windows. Postoji X86 64bit verzija za OSX i X86 32-bit verzija za Linux. Nigde traga oda ARM varijante.

Ja sam za da se napravi OpenSoruce multi platform aplikajia koja bi radila sve (NexU, ePorezi, Croso...) samo je problem na čemu je razvijati. Ovde je za sve uglavnom koriscena Java 8 jer ona je poslednja koja ima SUN PKCS11 biblioteke. Ali toliko stara verzija jave ima sama po sebi probleme sa tipa universal links

Raditi varijantu native MacOS app sa Swift/Objective-C bi zahtevalo morao da se napise wrapper za CryptoTokenKit ili da se radi direktno za C bibliotekom. Obe obcije su veoma komplikovane.

Po meni mozda najbolje je uraditi applikaciju u Qt Framework-u ali opet ista prica sa bibliotekom na niskom c nivou

@najdanovicivan ako pricamo o tehnologijama ja bih rekao da je bolja bolja varijanta Dart/Flutter koji nativno podrzava C interop app ali moramo da znamo sta je generalno problem pa onda da vidimo da nadjemo najbolje resenje. Ja sam raspolozen za malo open source-a ako je jos neko raspolozen ko je u materiji. Ono što ja vidim kao početni korak je razumevanje same materije šta je problem i zašto trenutna app radi kako radi, šta su ograničenja (kao što si gore objasnio neka od njih) i neka specifikacija use caseva, mozda cak i neki dijagram kako to treba da funkcioniše. Ono kako ja to laički posmatram je da je sve to neko komuniciranje izmedju aplikacija, pošalju se neke komande kartici, ona vrati neke podatke, cert sta god i tako dalje (za ovo flow nam treba neki chart), prosto mi je neverovatno da za tako nešto ne možemo da smislimo neko rešenje. Plus dobro bi bilo kad bi se neko iz državnog ITja uključio da da neko malo dodatno objašnjenje ili pomogne ali ne bih mnogo da tražim.

@biker972
Copy link

Koliko vidim problem je samo sa postinim cert. ja koristim mup-ov na LK i normalno sam predao prijavu. Imam M1 cip i poslednji mac os.

@pentago
Copy link

pentago commented May 15, 2023

Kog datuma ti je izdata LK?

@biker972
Copy link

05.12.2014.

@mperovic
Copy link

Koliko vidim problem je samo sa postinim cert. ja koristim mup-ov na LK i normalno sam predao prijavu. Imam M1 cip i poslednji mac os.

Nisam siguran da sve funkcionise i sa LK. Ja sam bez problema predao za godisnji porez, ali PP OPO nece da se pomeri iz statusa 'U pripremi'.

@Stefanats
Copy link

Meni je LK izdata 29.07.2014. da li to znaci da moram da je menjam?
Spec: m1 Ventura 13.3.1
U token adminu vidim citac i licnu kartu, dok u ePorezi pise kako kartica nije pronadjena..

@donmarkon
Copy link

Da li je moguce da me zeza citac kartica, pod win radi sve super ali na Mac kaze u token admin unknown token kada je kartica ubacena :(

@newtesla
Copy link

Koliko vidim problem je samo sa postinim cert. ja koristim mup-ov na LK i normalno sam predao prijavu. Imam M1 cip i poslednji mac os.

Nisam siguran da sve funkcionise i sa LK. Ja sam bez problema predao za godisnji porez, ali PP OPO nece da se pomeri iz statusa 'U pripremi'.

klikni na "osveži status prijave". poznat problem s portalom.

Inače: LK koje su NAKON 18.08.2014. rade sa starim middleware-om i ni sa čim nisu kompatibilne; LK koje su izdate NAKON 18.08.2020. (nije greška, potrefio se isti datum) koriste MUP CA4 samopotpisani root cert; a MUP LK koje su izdavane tokom 2022 i 2023 - imaju problem jer je čip na kartici potpuno nov i za sam čip je potreban drajver, i ne rade na meku.

@donmarkon
Copy link

Znaci ja imam taj problem meni je izdata kartica krajem prosle godine

@Flatout73
Copy link

Flatout73 commented Sep 30, 2023

2023 Update for Halcom and ARM:

  1. 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

  2. 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):

static  {
      System.setProperty("sun.security.smartcardio.library", "/System/Library/Frameworks/PCSC.framework/PCSC");
   }

or launch jar inside the macOS app with argument via terminal:

/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home/bin/java -Dsun.security.smartcardio.library=/System/Library/Frameworks/PCSC.framework/PCSC -jar "ePorezi.app/Contents/Resources/Java/ePorezi.jar"
  1. 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.

@MareCaree
Copy link

ima li resenja za Mup certifikat, M2 chip i licna 2020..
nije mi jasno jel trba token manager za MUP?

@svrdlans
Copy link

svrdlans commented Apr 1, 2024

malopre sam uspeo da potpišem i predam prijavu
podaci o sistemu:

  • macOS Sonoma (Apple Silicone)
  • usb token Pošte
  • ePorezi 1.2.2-4

prethodno sam instalirao 1.2.2-7 čini mi se, mogao sam da se ulogujem na ePorezi portal, ali nisam uspevao da potpišem prijavu jer sam dobijao grešku koju je gore neko pomenuo
onda sam obrisao tu verziju ePorezi aplikacije, skinu 1.2.2-4 i uspešno potpisao i poslao

@pentago
Copy link

pentago commented Apr 1, 2024

Koliko sam čuo pre neki dan, više nema potrebe za ePorezi aplikacijom jer se navodno ceo proces može obaviti kroz web aplikaciju. Jel može neko da potvrdi ovo?

@luka-stanisic
Copy link

Koliko sam čuo pre neki dan, više nema potrebe za ePorezi aplikacijom jer se navodno ceo proces može obaviti kroz web aplikaciju. Jel može neko da potvrdi ovo?

Tako je. Možeš da se uloguješ na ePorezi direktno iz browsera koristeći ConsentID app (eID - ovde napraviš nalog sa e-sertifikatom samo ako već nemaš i povežeš onda sa mobilnom app).

@mperovic
Copy link

mperovic commented Apr 1, 2024 via email

@pentago
Copy link

pentago commented Apr 1, 2024

Deluje kao kraj muka oko ove stvari onda :)

@milanbog92
Copy link

Samo da vas sve pozdravim pre nego sto se unsubscribujem :D Svaka cast svima koji su se cimali :D

@pentago
Copy link

pentago commented Apr 1, 2024

Moje čestitke svima takođe! <3

@svrdlans
Copy link

svrdlans commented Apr 1, 2024

@mperovic možeš li molim te da potvrdiš samo kad uspeš da potpišeš i pošalješ prijavu?

da se ne ponadam prerano 😄

@newtesla
Copy link

newtesla commented Apr 1, 2024

@mperovic možeš li molim te da potvrdiš samo kad uspeš da potpišeš i pošalješ prijavu?

da se ne ponadam prerano 😄

Sa Consent ID preko euprava eID - radi(skoro!) sve perfektno; pojedine (EPPDV) prijave imaju problem, prijave koje se ne potpisuju pa šalju već samo šalju; ostale, koje se potpisuju pa nakon toga šalju - sve rade.

Usput: svi potpisani XMLovi koje smo predali na Poreskoj putem eID - ostaju na eID :D

@mperovic
Copy link

mperovic commented Apr 1, 2024 via email

@lukapaunovic
Copy link

Radi sve savrseno sa consent id.

@Kasokaso
Copy link

Kasokaso commented Apr 2, 2024

Da, ConsentID je bolje resenje, takodje uspeo da se ulogujem.
https://www.ite.gov.rs/vest/7084/prijava-na-portal-eporezi-uz-mobilnu-aplikaciju-consentid.php

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment