ID-kaardiga failide allkirjastamine oma veebiserveris on senini üks kõige segasemaid internetist leitud teemasid.
Eesti e-riik lonkab oma kõiki jäsemeid ja seisab vist vaid juuksekarva otsas.
ID-kaardiga allkirjastamsieks on loodud mitmeid erinevaid süsteeme. Enamasti on kõik Java programmikeeles. Mõned ka veebilehel kasutamiseks mõeldud JavaScript koodiga.
JavaScript osa vajab alati taustal serveris toimimas kas Java või C++ süsteemi.
Esmalt asjaga tutvudes komistad arvatvasti otsa "Veebilehel allkirjastamine ID-kaardi ja digi-IDga" postitusele. (https://www.id.ee/artikkel/veebilehel-allkirjastamine-id-kaardi-ja-digi-idga-2/)
Seal soovitatakse kasutada hwcrypto.js nimelist JavaScript komponenti.
Esmalt ei mainit ka kusagil, et see on aegunud ja seda ei soovitata enam kasutada. Selle avastad alles mõnda aega hiljem koodi testides.
hwcrypto.js muidu iseensest toimib ja sellega saab käte cert ja allkirja kasutaja kaardilt, sisestades PIN2 koodi.
Sellele lisaks on vaja ehitada ka backend Java süsteem.
Süsteemi ehitamiseks antakse sulle poolikud koodid.
//Create a container with a text file to be signed
Container container = ContainerBuilder
.aContainer()
.withDataFile("testFiles/legal_contract_1.txt", "text/plain"

.build();
//Get the certificate (with a browser plugin, for example)
X509Certificate signingCert = getSignerCertSomewhere();
//Get the data to be signed by the user
DataToSign dataToSign = SignatureBuilder
.aSignature(container)
.withSigningCertificate(signingCert)
.withSignatureDigestAlgorithm(DigestAlgorithm.SHA256)
.buildDataToSign();
//Data to sign contains the signature dataset including the digest of the file(s) that should be signed
byte[] signableData = dataToSign.getDataToSign();
//Sign the signature dataset
byte[] signatureValue = signDataSomewhereRemotely(signableData, DigestAlgorithm.SHA256 );
//Finalize the signature with OCSP response and timestamp (or timemark)
Signature signature = dataToSign.finalize(signatureValue);
//Add signature to the container
container.addSignature(signature);
//Save the container as a .asice file
container.saveAsFile("test-container.asice" );
Antud näidises on kaks olematut käsku getSignerCertSomewhere ja signDataSomewhereRemotely.
getSignerCertSomewhere käsk peaks kusagilt võtma cert osa ja signDataSomewhereRemotely peaks kusagil väliselt antud andmetele põhjal looma allkirja.
hwcrypto.js annab kohe välja vajatud cert ja allkirja, aga seda ei anna ühendada Java süsteemiga. Java süsteem tahab saada allkirja koostatud data põhjal, aga hwcrypto.js ei lase allkirja loomisel lisada juurde mingit kolmandat data sisu.
Seega see hwcrypto.js jama ei toimi ja nagu mainitud sai, siis see on ka juba aegunud süsteem ja seda ei soovitata kasutada.
Kui nüüd vähe oma raisatud aega ja närve taastada ja uuesti proovida, siis komistad ehk lõpuks otsa uuele Web eID süsteemile.
Seda ei pruugi algul kusagilt leida ja selle kohta on saadaval vaid väga keeruline ja segane dokumentatsioon.
Väga peidetult on ka leitav, et see teenus on tasuline. Ja kui veel oma aega seal raisata ja hinnakirja otsida, siis lõpuks kusagilt väga sügavuti minnes on leitav ka hinnakiri.
Lisaks on vaja sul ka tellida testkaart. "Enda e-teenuses autentimise ja allkirjastamise testimiseks soovitame tellida testkaardi, mida väljastab SK ID Solutions AS."
Test ID-kaart (2018, uus Idemia kaart) 34 eur.
Vajalik võib olla ka krüptopulk hinnaga 120 või 75 eur.
Digidoc allkirjade kasutamine 150 allkirja kuus hinnaga 0,24 eur/allkiri või kuumakse alates 36 eur. (Hinnakiri on erinevates kohtades erinev ja võib muutuda).
Siiani jõudes on arvatavasti enamusel väikearendajatel kogu tahtmine lõppenud ja jääb vaid tõdeda, et Eesti riigi e-süsteemid on liiga kulukad ja keerulised kasutada.
Eesti riik loob süsteeme kasu lootes.
Süsteeme loodakse vaid väga võimekatele suurasutustele. Asutus peab suutma tasuda väga pikka ja kulukat tööd oma programmeerijatele selle segaduse selgeks tegemisel ja kasutama õppimisel.
ID-kaart / Arendajale / Digiallkirjastamine