Používanie eID 3.0 na nepodporovanej distribúcii - hard way

12.01 | 13:00 | Mirecove dristy | Miroslav Bendík

Dnešný blog bude o tom ako rozbehať eID klienta na oficiálne nepodporovanej distribúcii (alebo lepšie povedané na distribúcii, ktorá nie je úplnou vykopávkou).

CCID čítačka

Aktuálne vydávané čítačky sú plne kompatibilné s pcsc-lite. Stačí nainštalovať pcsc-lite a naštartovať službu pcscd ak nenaštartovala automaticky (napr. v prípade gentoo je nainštalované udev pravidlo, ktoré automaticky spustí službu po pripojení čítačky). Jej funkčnosť môžme skontrolovať príkazom pcsc_scan.

pcsc_scan

eID klient

Aplikáciu pre komunikáciu s čítačkou je možné stiahnuť na stránke ústredného portálu verejnej správy. Ja som konkrétne sťahoval balík pre Mint 18/19.

Aplikáciu som dal do samostatného adresára a potom rozbalil.

mkdir eid
cd eid
mv /cesta/k/Aplikacia_pre_eID_amd64_mint.tar.gz Aplikacia_pre_eID_amd64_mint.tar.gz
tar -xvzf Aplikacia_pre_eID_amd64_mint.tar.gz
ar x Aplikacia_pre_eID_amd64_mint.deb
tar -xvzf data.tar.gz

Následne skopírujeme aplikáciu na správne miesto (všetky príkazy pod rootom).

cp ./usr/bin/EAC_MW_klient /usr/bin/EAC_MW_klient
mkdir -p /usr/share/applications/
cp ./usr/share/applications/aplikacia-pre-eid.desktop /usr/share/applications/aplikacia-pre-eid.desktop
cp -R ./usr/lib/eac_mw_klient/ /usr/lib

Ďalej budeme potrebovať plugin do prehliadača. To vyriešime inštaláciou balíka disig-web-signer.

mkdir disig
cd disig
https://download.disigcdn.sk/cdn/products/websigner/disig-web-signer.mint_amd64.deb
ar x disig-web-signer.mint_amd64.deb
tar -xvJf data.tar.xz

Ako root skopírumeme obsah balíka:

mkdir -p /etc/chromium/native-messaging-hosts/
cp ./etc/chromium/native-messaging-hosts/sk.disig.websigner.1.0.7.java.json /etc/chromium/native-messaging-hosts/sk.disig.websigner.1.0.7.java.json
mkdir -p /etc/xdg/autostart/
cp ./etc/xdg/autostart/sk.disig.WebSigner.desktop /etc/xdg/autostart/sk.disig.WebSigner.desktop
mkdir -p /opt/
cp -R ./opt/disig/ /opt
mkdir -p /usr/lib/mozilla/native-messaging-hosts/
cp ./usr/lib/mozilla/native-messaging-hosts/sk.disig.websigner.1.0.7.java.json /usr/lib/mozilla/native-messaging-hosts/sk.disig.websigner.1.0.7.java.json
mkdir -p /usr/share/chromium/extensions/
cp ./usr/share/chromium/extensions/odbdbcaekkgabdfaabepfjgiooilmaoe.json /usr/share/chromium/extensions/odbdbcaekkgabdfaabepfjgiooilmaoe.json
mkdir -p /usr/share/google-chrome/extensions/
cp ./usr/share/google-chrome/extensions/odbdbcaekkgabdfaabepfjgiooilmaoe.json /usr/share/google-chrome/extensions/odbdbcaekkgabdfaabepfjgiooilmaoe.json
mkdir -p /usr/share/applications/
cp ./usr/share/applications/sk.disig.WebSigner.desktop /usr/share/applications/sk.disig.WebSigner.desktop

Qt 4

Klient pre svoj beh potrebuje knižnicu Qt 4. Ak sa nachádza v repozitároch distribúcie máme takmer vyhrané. Ak nie (Qt 4 sa začalo nahradzovať knižnicou Qt 5 okolo roku 2012), musíme ju ručne skompilovať. Budem predpokladať, že máme nainštalovaný kompilátor a všetky potrebné knižnice aj s hlavičkovými súbormi. Stiahneme Qt 4 a patche potrebné na kompiláciu s aktuálnym gcc.

mkdir qt
cd qt
wget https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz
wget http://git.yoctoproject.org/cgit/cgit.cgi/meta-qt4/plain/recipes-qt4/qt4/qt4-4.8.7/0036-qt-everywhere-opensource-src-4.8.7-gcc6.patch?h=b37d8b93924b314df3591b4a61e194ff3feb5517 -O 0036-qt-everywhere-opensource-src-4.8.7-gcc6.patch
wget https://raw.githubusercontent.com/gobolinux/Recipes/b7501a9f0ba0681f51050ffefb6f1f1fe8b93353/revisions/Qt/4.8.7-r2/01-gcc6_build_fix.patch

Rozbalíme a opatchujeme zdrojáky.

tar -xvzf qt-everywhere-opensource-src-4.8.7.tar.gz
cd qt-everywhere-opensource-src-4.8.7
patch -p1 < ../01-gcc6_build_fix.patch
patch -p1 < ../0036-qt-everywhere-opensource-src-4.8.7-gcc6.patch

Skompilujeme

CFLAGS="-pipe -O1 -fPIC -fpermissive" CXXFLAGS="-pipe -O1 -fPIC -fpermissive -std=gnu++11" ./configure -prefix /usr/local/eid -accessibility -no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-gtkstyle -no-sse3 -no-sse4.1 -no-sse4.2 -fast -opensource -no-javascript-jit -no-scripttools -script -declarative -no-declarative-debug -confirm-license -nomake "examples demos docs"
make

a nainštalueme (pod rootom).

make install

Po úspešnej inštalácii môžme spustiť eID klienta pod rootom príkazom LD_LIBRARY_PATH="/usr/local/eid/lib:$LD_LIBRARY_PATH" /usr/bin/EAC_MW_klient. Pri troche šťastia nás aplikácia poteší totu peknou hláškou, ktorá znamená, že správca balíka libcurl v debiane je kretén, ale nemá to žiaden vplyv na aplikáciu a môžme ju smelo používať.

/usr/bin/EAC_MW_klient: /usr/lib64/libcurl.so.4: no version information available (required by /usr/lib/eac_mw_klient/libpaos-communication.so)

Ak sa však zobrazí hlásenie /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found znamená to, že správca balíka v našej distribúcii je tiež kretén, ale o niekoľko úrovní menší než ten z debianu. Riešenie rozpíšem v sekcii curl.

Curl

Klient eID je skompilovaný voči balíkom v debiane. Jednou z jeho závislostí je libcurl. Debian má možnosť súčasne nainštalovať libcurl3 a libcurl4. Štandardným spôsobom skompilovaný libcurl je univerzálny, má stabilné API, takže aplikácii je jedno akú verziu jej podhodíme. Dá sa však skompilovať aj s verzovanými symbolmi, vtedy nám aplikácia zlinkovaná s trojkovou verziou nebude fungovať s libcurl4. Väčšinou to nie je žiaden problém. V normálnych distribúciách sa trojkové aplikácie linkujú s libcurl.so.3 a štvorkové s libcurl.so.4. V debiane si istý inteligent povedal: „Čo tak vytvoriť balík s libcurl.so.4, ale so sybolmi z libcurl.so.3?“ Tak sme teda získali binárky vyžadujúce libcurl.so.4 s trojkovým rozhraním.

Poďme si teda skompilovať náš vlastný retardovaný libcurl.

mkdir curl
cd curl
wget https://curl.haxx.se/download/curl-7.63.0.tar.gz
tar -xvzf curl-7.63.0.tar.gz
cd curl-7.63.0
./configure --prefix=/usr/local/eid --disable-ldap  --disable-ldaps  --disable-manual --disable-versioned-symbols --enable-ipv6  --enable-threaded-resolver --with-gssapi  --with-libssh2 --with-random='/dev/urandom' --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' --disable-symbol-hiding --enable-versioned-symbols

Teraz musíme v súbore lib/libcurl.vers zmeniť CURL_OPENSSL_4 na CURL_OPENSSL_3. Skompiulujeme ho pomocou príkazu make a nainštalujeme pod rootom príkazom make install.

Klienta eID môžme spustiť pod rootom príkazom LD_LIBRARY_PATH="/usr/local/eid/lib:$LD_LIBRARY_PATH" /usr/bin/EAC_MW_klient.

PIN

Prílohy



    • RE: Používanie eID 3.0 na nepodporovanej distribúcii - hard way 12.01 | 16:02
      Avatar WlaSaTy   Návštevník

      Pekná prácička, i keď eID je kompletne mimo mňa. Skúsil si do tej čítačky vložiť inú čipovú kartu, že či to reaguje a či sa dá niečo vyčítať? Elekrtičenka, platobná karta, ...

      • RE: Používanie eID 3.0 na nepodporovanej distribúcii - hard way 12.01 | 16:38
        Avatar Miroslav Bendík Gentoo  Administrátor

        Ja som dostal na polícii túto a je to univerzálna čítačka/zapisovačka, ktorá podporuje rôzne typy kariet, medzi inými aj EMV (teda platobné karty).

        • RE: Používanie eID 3.0 na nepodporovanej distribúcii - hard way 12.01 | 18:50
          Avatar WlaSaTy   Návštevník

          A dá sa z toho niečo vyčítať? Lebo cez NFC sa na platobné karty už nezvykne zapisovať história transakcií, a ani zostatok na účte. Dosť to nas.. keď vypadne platobný terminál v bufete a mne je tá akožekreditka s gastráčmi naprt.