Naslov je obmanjujući. Nemam midlver koji mogu da pokrenem na GNU/Linuxu, ali znam način kako da zvaničan PKCS#11 modul za Windows učinim dostupnim na GNU/Linuxu.

Ideja je da na Windows računar (server, virtuelna mašina, kutija u ćošku) instaliramo zvaničan midlver preuzet sa sajta MUP CA, uz koji dolazi i PKCS#11 modul. Čitač kartice treba da bude priključen na Windows računar. Ako to nije lokalna virtuelna mašina koja ima pristup USB priključku računara, može se koristiti neka mrežna redirekcija USB priključka. Cilj je da dobijemo lokalno prikopčan čitač koji deluje kao da je zakačen na Windows računar.

Glavnu podršku pruža pkcs11-proxy.

Iz ovog paketa, na Windows računaru obezbedimo pkcs11-daemon koji omogućava komunikaciju sa zvaničnim modulom mrežnim putem.

Na GNU/Linux računaru postavimo pkcs11-proxy PKCS#11 modul koji sve zahteve kroz mrežu isporučuje pkcs11-daemon procesu na Windowsu, a putem njega zvaničnom midlveru. Zvaničan midlver komunicira sa čitačem koji deluje kao da je zakačen na Windows računar iako je zapravo zakačen lokalno na GNU/Linux računar.

Vredi istaći da pkcs11-daemon ne obezbeđuje sigurnost veze. Ako mreža nije bezbedna, protokol se može provući kroz SSH tunel.

Priredio sam kompilirani paket za Windows pkcs-daemon.zip. Izdanje 32bit, mingw gcc kompilator, Git stablo od 5. aprila ove godine.

Pretpostavljajući da je IP adresa Windows računara 192.168.122.26, kuckamo:

set PKCS11_DAEMON_SOCKET tcp://192.168.122.26:4242
pkcs11-daemon.exe "C:\Program Files\MUP RS\Republic of Serbia ID Card Middleware\rsidp11_x86.dll"

Na GNU/Linux računaru iz izvornog koda prevedemo pkcs11-proxy.so i postavimo promenljivu okruženja PKCS11_PROXY_SOCKET na istu vrednost kao prethodnu promenljivu na Windowsu.

Programima sada treba ponuditi pkcs11-proxy.so kao PKCS#11 modul. Na primer:

$ export PKCS11_PROXY_SOCKET="tcp://192.168.122.26:4242"
$ pkcs11-tool --module ./libpkcs11-proxy.so -L Available
Available slots:
Slot 0 (0x0): Gemplus USB Smart Card Reader 0
  token label:   RS ID Card
  token manuf:   NetSeT d.o.o.
  token model:   RS ID Card
  token flags:   readonly, login required, PIN initialized, token initialized, user PIN count low, user PIN locked
  serial num  :

Program pkcs11-tool je deo opensc paketa. Ili isto to u Firefoxu na GNU/Linuxu nakon učitavanja novog sigurnosnog uređaja (Podešavanja > Napredno > Sigurnosni uređaji):

firefox-pkcs11.png

Da bi učitavanje bilo uspešno, Firefox mora biti pokrenut iz školjke u kojoj je postavljena promenljiva (najlakše ubaciti promenljivu u samu sesiju). Na portalu eUprava klikom na prijava sertifikatom Firefox NSS pita za unos PIN koda. Prethodno treba omogućiti Ponovno ssl dogovaranje (security.ssl.allow_unrestricted_renego u about:config). Kartica mi je blokirana, ranijim neodgovarajućim unosom PIN koda pri programiranju, pa dalje ne mogu da isprobam :) Neka to posluži i kao upozorenje drugima, nema garancije.