Erinevus lehekülje "EID toorik" redaktsioonide vahel

Allikas: eid.eesti.ee
Jump to navigation Jump to search
P (→‎Näiterakendused: Java konfiguratsiooni fail eraldi)
(Kustutame tooriku, õige leht on nüüd EID_rakendusjuhend)
 
(ei näidata 4 kasutaja 412 vahepealset redaktsiooni)
1. rida: 1. rida:
= Elektroonilise identiteedi (e-ID) rakendusjuhend tarkvaraarendajatele [TOORIK] =
 
  
 
== Sissejuhatus ==
 
=== Projekti eesmärk ===
 
See rakendusjuhend annab ettevõtete IT-arhitektidele ja tarkvaraarendajatele vajalikud tehnilised alusteadmised e-ID kasutuskeskkondade loomiseks. e-ID all mõistetakse Eesti ID-kaarti, digitaalset isikutunnistust (digi-ID-d), elektroonilist elamisloakaarti, digitaalset templit ja mobiil-ID-d ning eraldi väljatoodud juhtudel ka teiste riikide elektroonilisi identiteete. 
 
 
=== Sihtgrupp, eeldused ===
 
Töö sihtrühmaks ei ole lõppkasutajad.
 
 
=== Mis on mis ===
 
'''Digitaalne isikutunnistus''' ehk Digi-ID on riiklik digitaalne dokument, millega saab elektroonilises keskkonnas oma isikut tuvastada ja anda digitaalallkirja. Erinevalt ID-kaardist ei
 
kanta Digi-ID-kaardile isiku nime, fotot ega muud vajalikku, et teda saaks kasutada visuaalse isikut tõendava dokumendina. Krüptograafia seisukohast on tegu samasuguse kiipkaardiga nagu ID-kaart ning Digi-ID sertifikaatide väljastamisel kasutab Sertifitseerimiskeskus samu ülpõhimõtteid, ESTEID-kaardi sertifitseerimispoliitikat ning ESTEID sertifikaatide profiili. Seetõttu käsitleb juhend Digi-ID-d ja ID-kaarti samaväärsena.
 
 
'''Digitaalne tempel''' on AS-i Sertifitseerimiskeskus (SK) firmapärane teenus, mille abil saavad ettevõtted anda digiallkirju dokumentidele, millega lisatakse dokumendile kinnitus, et dokument
 
pärineb allkirjastanud asutusest ning et dokumenti ei ole vahepeal muudetud. Tüüpiliselt kasutatakse seda mass-produtseeritud dokumentide tarbeks, näiteks arved, maksekorraldused, kinnitused, tunnistused jne. Teenuse tellimisel väljastab SK ettevõttele kas kiipkaardil või USB-krüptopulgal X.509-sertifikaadi. Digitaalse templi kasutamisel luuakse andmete allkirjastamisel DigiDOC-vormingus konteiner täpselt samamoodi nagu ID-kaardi või Digi-ID kasutamisel andmete allkirjastamiseks.
 
 
'''Elektrooniline elamisloakaart''' -- todo
 
 
''' Mobiil-ID ''' on protokoll kliendi autentimiseks. Selles protokollis püütakse klienti autentida sellega, et serveri genereeritud väljakutse (''challenge'') signeeritakse kliendi sertifikaadis
 
olevale avalikule võtmele vastava salajase võtmega, mis asub aga kasutajale kuuluva mobiiltelefoni SIM-kaardil.
 
 
== eID kasutamine olemasolevate rakendustega ==
 
todo
 
 
=== Töölaua rakendused ===
 
'' Enne kirjutamist tuleb teha konkreetselt piiritletud valik (nt Outlook ja seal krüpteerimine, signeerimine) ''
 
 
== Uute eID rakenduste loomine ==
 
'' Uute rakenduste loomise osas vajavad käsitlemist: digiallkirjastamine, krüpteerimine (piirame end CDOC-iga), isikutuvastamine veebis (siia alla ka OCSP, CRL, LDAP), isikuandmete faili kasutamine, DigidocService kasutamine. ''
 
=== Huvitavad viited ===
 
 
"Uue ID-kaardi baastarkvara loomise käigus tehtud allkirjastamisplugina info ning JavaScripti teegi info ning lihtne näidisrakendus, kuidas teeki kasutada, on alla laetav [https://installer.id.ee/media/web_sign_demo.zip siit] (viimane versioon 0.11, uuendatud 11.11.2011)."
 
 
"Uuenenud on veebis allkirjastamise PHP näidisrakendus, mis kasutab JavaScripti teeki (idcard.js) allkirjastamisplugina valimiseks. Rakendust saab töötamas näha aadressil https://www.openxades.org/ddservice/, sealt samast on alla laetav ka lähtekood."
 
 
"Mobiil-IDga allkirjastamiseks on loodud näidisrakendus PHP-s. Näidisrakenduse koos lähtekoodiga leiad: http://demo.digidoc.ee/sign_sample/"
 
 
[http://www.id.ee/10736 Sertifikaadi kehtivuse kontroll OCSP-ga] (erinevalt seal väidetust toetab mod_ssl OCSP'd ilusti)
 
 
[http://www.id.ee/?id=10737 Apache'i ja IISi konfigureerimine] ID-kaardi toetamiseks
 
 
[http://www.id.ee/public/DigiDocLib_2.2.5_est.pdf libdigidoc] ja [http://www.id.ee/public/JDigiDoc_2.1_eng.pdf jdigidoc] dokumentatsioon.
 
 
Info DigiDocService testkeskkonna kohta: http://www.id.ee/?id=28727
 
 
[http://javadoc.iaik.tugraz.at/pkcs11_wrapper/1.2.15/iaik/pkcs/pkcs11/package-summary.html IAIK PKCS#11] teegi, mida JDigiDoc kasutab, dokumentatsioon.
 
 
[http://www.isecurity.info/downloads.aspx eToken tarkvara Linuxile] - sealt võtta "eToken Linux SDK and Middleware" (vajab 32-bitist libpcsclite'i, samuti võib olla vajalik muuta .deb paki control faili).
 
 
=== Huvitavad rakendused ===
 
 
Käsurea rakendus <tt>eidenv</tt> kuvab kaardil olevad isikuandmed. Kasutades <tt>-x</tt> võtit käivitab argumendiks antud programmi keskonnas, kuhu on lisatud ESTEID_* muutujad samade andmetega.
 
 
<tt>cdigidoc</tt> omab ka CGI režiimi, milles ta tagastab lihtsasti (näiteks PHP's) parsitavat teksti. (NB! cdigidoc on hetkel vigane - loe alt poolt)
 
 
=== Kahtlased kohad ===
 
 
03.05.2012 seisuga on cdigidoc rakendus vigane. Mingi hetk lisati võtmed <tt>-encrypt-sk</tt> ja <tt>-decrypt-sk</tt>, mis teevad SK spetsiifilist krüpteerimist (kõigepealt loovad DDOC konteineri, mis pannakse BDOC sisse), ent selle käigus lõhuti ära <tt>-encrypt</tt> ja <tt>-decrypt</tt> funktsionaalsus, millega sai teha n-ö tavalist (de)krüpteerimist.
 
 
Kuna http://id.ee/?id=28735 ja Ubuntu repodest saadaval C-teegil on mõned päris suured muudatused sees, siis küsimus millist versiooni me libdigidoc'ist (ja teistest teekidest) kasutame?
 
 
Koos eToken vahevaraga suudab PC/SC üles leida digitemplil olevad andmed. OpenSC seda aga (esialgsel testimisel) ei suuda.
 
 
Kui paigaldada eToken vahevara Linuxile, siis sellega on kaasas ka paar QT teegi moodulit, mille installer paneb /usr/lib/eToken kausta ning ütleb ld.so.conf'ile, et nüüd terve süsteem neid kasutaks. Minu (Tiidu) keskkonnas tekitas see hulga jama (näiteks Skype lõpetas töötamise), kuna kaasas olid QT versiooni 4.2.3 moodulid, ent ülejäänud süsteem kasutas 4.7.4.
 
 
Kui kasutada eTokenit VirtualBoxis jooksva Windowsiga (ka teiste OS'ide korral?), siis on vaja paigaldada VirtualBox Extension Pack - vastasel juhul kuvatakse küll krüptopulga kaardilugeja, ent arvatakse, et see on tühi.
 
 
=== Huvitavad meetodid ===
 
 
==== JDigiDoc ====
 
JDigiDoc meetodid suvalise baidijada allkirjastamiseks PIN1'ga (näiteks autentimise jaoks) - NB! ei kontrolli serdi kehtivust:
 
 
<big>
 
<syntaxhighlight lang="java">
 
PKCS11SignatureFactory.openSession(false, slot, pin);
 
PKCS11SignatureFactory.getAuthCertificate(0, null);
 
PKCS11SignatureFactory.sign(data, 0, null, null);
 
DigiDocVerifyFactory.verify(data, signature, cert, false, null);
 
</syntaxhighlight>
 
</big>
 
 
 
JDigiDoc meetodid sertifikaadi kehtivuse kontrolliks:
 
 
<big>
 
<syntaxhighlight lang="java">
 
X509Certificate.checkValidity();
 
DigiDocVerifyFactory.verifyCertificate(X509Certificate cert, X509Certificate caCert);
 
NotaryFactory.checkCertificateOcspOrCrl(X509Certificate cert, boolean bUseOcsp); // hetkel katkine, kasutada järgmist meetodit
 
NotaryFactory.checkCertificate(X509Certificate cert); // kas kasutatakse OCSP või CRL määratakse konfifailis
 
</syntaxhighlight>
 
</big>
 
 
(<tt>checkCertificateOcspOrCrl</tt> otsib sertifikaadi väljaandjat konfifailist vanade võtmete järgi, mis tõttu see uute konfifailidega ei õnnestu ning Bouncy Castle viskab meile NullPointerExceptioni)
 
 
==== libdigidocpp ====
 
libdigidocpp korral tuleb isiku tuvastamiseks luua oma alamklass PKCS11Signer'ist. Õige sertifikaadi valimise näide on EstEIDSigner'is (non-repudiation(1) lipu asemel kontrollime digital-signature lippu(0)) ning PIN lugemise näide on EstEIDConsolePinSigner'is.
 
 
OCSP kinnituse pärimiseks on OCSP::checkCert(X509* cert, X509* issuer, const std::vector<unsigned char>& nonce).
 
 
= Näiterakendused =
 
 
== Allkirjastamise rakendus ==
 
Käsurea utiliit, millele antakse ette nimekiri failidest ning tulemuseks on BDOC konteiner allkirjastatud failidega ja OCSP kehtivuskinnitusega.
 
 
=== C++ ===
 
Kasutus: <tt>./sign infile:mimetype... outfile</tt>
 
 
* <tt>infile</tt> - failid, mida allkirjastada
 
* <tt>mimetype</tt> - allkirjastatava faili [http://en.wikipedia.org/wiki/Internet_media_type MIME tüüp], nt <tt>text/plain</tt>
 
* <tt>outfile</tt> - loodava BDOC konteineri nimi, soovitatav laiendus <tt>.bdoc</tt>
 
 
Vaikimisi kasutatakse PIN küsimiseks enda loodud lahendust, mis sõltub <tt>unistd.h</tt>'st (mida Windowsil pole). libdigidocpp teegi SVN repositooriumis on [https://svn.eesti.ee/projektid/idkaart_public/trunk/libdigidocpp/src/crypto/signer/EstEIDConsolePinSigner.cpp EstEIDConsolePinSigner] klass, mis töötab ka Windowsi all, ent 02.05.2012 seisuga ei ole RIA Ubuntu repodes olevas teegis. Kui see aga on olemas, siis võib kompileerides lisada võtme <tt>-DHAVE_ESTEID_CONSOLE_PIN_SIGNER</tt> selle kasutamiseks.
 
 
Kompileerimisel on vajalik linkida libdigidocpp teek.
 
 
=== Java ===
 
Kasutus: <tt>java JavaSign [-cfg config] infile... outfile</tt>
 
 
* <tt>config</tt> - kasutatav konfiguratsioonifail (vaata altpoolt), vaikimisi otsitakse praegusest kaustast <tt>jdigidoc.cfg</tt>
 
* <tt>infile</tt> - failid, mida allkirjastada
 
* <tt>outfile</tt> - loodava BDOC konteineri nimi, soovitatav laiendus <tt>.bdoc</tt>
 
 
Vajab Java versioon 1.7 või uuemat, kuna allkirjastatava faili MIME tüübi tuvastamiseks kasutatakse [http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#probeContentType%28java.nio.file.Path%29 Files] klassi.
 
 
Kasutab JDigiDoc teeki.
 
 
== Java konfiguratsiooni fail ==
 
JDigiDoc teek kasutab [http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load%28java.io.Reader%29 Properties] faili konfiguratsiooni haldamiseks.
 
 
Märkimisväärsed read selles failis:
 
* <tt>DIGIDOC_DEFAULT_PROFILE</tt> - (hetkel) allkirjastamise rakendus ignoreerib seda ning kasutab alati TM ehk kehtivuskinnituse ning ajamärkidega profiili,
 
* <tt>DIGIDOC_SIGN_PKCS11_DRIVER</tt> - kaardi PKCS11 API ohjur,
 
* <tt>DIGIDOC_LOG4J_CONFIG</tt> - logimise konfiguratsiooni fail,
 
* <tt>SIGN_OCSP_REQUESTS</tt> - kas allkirjastada OCSP päringud,
 
** <tt>DIGIDOC_PKCS12_CONTAINER</tt> - allkirjastamiseks kasutatava sertifikaadi asukoht, PKCS12 formaadis,
 
** <tt>DIGIDOC_PKCS12_PASSWD</tt> - parool allkirjastamiseks kasutatava sertifikaadi PKCS12 faili avamiseks,
 
** <tt>DIGIDOC_OCSP_SIGN_CERT_SERIAL</tt> - allkirjastamiseks kasutatava sertifikaadi seerianumber,
 
* <tt>DIGIDOC_CA_1_CERT#</tt>, <tt>DIGIDOC_CA_1_OCSP#_CERT</tt>, <tt>DIGIDOC_CA_1_OCSP#_CA_CERT</tt> - sertifikaatide asukohad; kasutada eesliidet <tt>jar://</tt>, et anda asukoht classpathist.
 

Viimane redaktsioon: 23. oktoober 2012, kell 11:36