MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Hasonló dokumentumok
MicroSigner Közvetítő Szerver fejlesztői dokumentáció

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

12.óra jquery Framework #1. Gyimesi Ákos

Webszolgáltatások (WS)

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Bevezetés Működési elv AJAX keretrendszerek AJAX

Valimed API. REST API a magyarországi orvos pecsétszámok validálására

Pick Pack Pont kereső és boltválasztó alkalmazás

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

RIA Rich Internet Application

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

Webes alkalmazások fejlesztése

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

Web-technológia PHP-vel

Web-fejlesztés NGM_IN002_1

Útmutató az integrációhoz

Delphi programozás IV.

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

"Egységes erdélyi felnőttképzés Kárpát-medencei hálózatban" JAVA ALAPÚ WEBPROGRAMOZÁS. M6 Modul: A DOM Modell

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Symfony kurzus 2014/2015 I. félév. Controller, Routing

Az Educatio weboldalain elhelyezhető hirdetések technikai paraméterei

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

HTML. Ismerkedés a JavaScripttel. A JavaScript lehet ségei. A JavaScript kód helye. Önálló JavaScript fájlok

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

Természetesen készíts egy csempe nevű könyvtárat és ide mentsd az index.html állományt.

AJAX Framework építés. Nagy Attila Gábor Wildom Kft.

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

MailMasterPlus API. fejlesztői dokumentáció

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Algoritmusok Tervezése. 5. Előadás Visual Basic 2. Dr. Bécsi Tamás

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Szolgáltatási szerződés elektronikus aláírása

Bevezető. Servlet alapgondolatok

ÜGYFÉL OLDALI BEÁLLÍTÁSOK KÉZIKÖNYVE

Szolgáltatási szerződés elektronikus aláírása

JAVA webes alkalmazások

Tanúsítvány igénylése sportegyesületek számára

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

Programozási nyelvek Java

Elektronikus levelek. Az informatikai biztonság alapjai II.

PHP. Adatbázisok gyakorlat

Web programoz as

Drupal biztonság. Tuesday, April 3, 12

M-Fájlok létrehozása MATLAB-ban

Tanúsítványkérelem készítése, tanúsítvány telepítése Microsoft Internet Information szerveren

VBA makrók aláírása Office 2007 esetén

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

NONPROFIT ÉRDEKVÉDELMI SZERVEZETEK FEJLESZTÉSE (PL.3346) Java-script nyelv. programozás alapjai. Haramia László

NetPay technikai áttekintés partnereink számára

WEBES ALKALMAZÁSFEJLESZTÉS 1.

Hálózati architektúrák és Protokollok GI Kocsis Gergely

MVC. Model View Controller

Webes alkalmazások fejlesztése. 9. előadás Bevezetés az ASP.NET MVC keretrendszerbe

A HTML5 hirdetések előkészítéséhez szükséges műszaki előírások

Objektumorientált programozás

Sakk játék. Feladat: JavaScript segítségével olyan programot kell írni, ami egy sakktáblát szimulál. Kiválasztásra változtatják a helyüket.

A JavaScript főbb tulajdonságai

Az elektronikus másolatkészítés rendszerének műszaki dokumentációja 1. BEVEZETŐ

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

YOURMYPARTNER ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEK

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Model View Controller alapú alkalmazásfejlesztés

SSL elemei. Az SSL illeszkedése az internet protokoll-architektúrájába

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Az image objektum. Az image eseménykezel i. Képek el zetes betöltése. Feladat. Váltóképek készítése

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Készítette: Gál Tamás. A tananyag programozott változata itt érhető el: Webfejlesztés

Azt írom alá, amit a képernyőn látok?

S z á m í t ó g é p e s a l a p i s m e r e t e k

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához. ERA - MNBSigner. Elektronikus aláírás - felhasználói dokumentáció

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

ColourSMS Protokol definíció. Version 1.2

Azonosí tá srá Visszávezetett Dokumentumhitelesí te s (AVDH) á Perkápu vonátkozá sá bán

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 5.ELŐADÁS. Sütik és munkamenetek kezelése

Műszaki dokumentáció Másolatkészítés műszaki feltételei

Elektronikusan hitelesített PDF dokumentumok ellenőrzése

Titkosítás NetWare környezetben

Web-fejlesztés NGM_IN002_1

AWK programozás, minták, vezérlési szerkezetek

3. Osztályok II. Programozás II

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

InFo-Tech emelt díjas SMS szolgáltatás. kommunikációs protokollja. Ver.: 2.1

e-szignó Hitelesítés Szolgáltató Microsec e-szignó Tanúsítvány telepítése Mac OS X Snow Leopard operációs rendszeren

WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

M-Files Dokumentumkezelő telepítése

Programozási technológia

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Elektronikusan hitelesített PDF dokumentumok ellenőrzése

Webes űrlapok és az XForms ajánlás

Jquery. Konstantinusz Kft.

Átírás:

MICROSEC ZRT. MicroSigner Közvetítő Szerver fejlesztői dokumentáció verzió: 1.0 Ivicsics Sándor, Máté Norbert, Vanczák Gergely 2016.06.09.

Tartalom Általános információk... 2 ESign munkamenet létrehozása... 2 Elvégzendő programozási feladatok... 2 Példa PHP-ban... 3 Weboldal generálása... 4 Elvégzendő programozási feladatok... 4 Példa... 5 Aláírt lenyomatok beillesztése... 5 Elvégzendő programozási feladatok... 5 Példa PHP-ban... 5 Az ESign alapértelmezett viselkedésének megváltoztatása a weboldalon... 7 onconfigajaxfailure(jqxhr, textstatus)... 7 onconfignotgot(counter)... 7 onconfiggot()... 7 onsignedhashesajaxfailure(jqxhr, textstatus)... 7 onsignedhashesesignfailure(status)... 7 onsignedhashesnotgot(counter)... 7 Példa (JavaScript)... 7

Általános információk A MicroSigner alkalmazás aktuális verziója az alábbi linkről tölthető le: https://proxy.microsigner.com/client/microsigner_setup.msi Informatív ábra a kialakítandó rendszer működéséről: A kommunikáció a közvetítő szerverrel JSON formátumban történik HTTPS protokoll felett TLSv1-et használva. ESign munkamenet létrehozása Elvégzendő programozási feladatok JSON objektum létrehozása az alábbi mezőkkel: mode: A MicroSigner alkalmazás elvárt működési módja. Lehetséges értékek: SELECT_CERTIFICATE_AND_SIGN: tanúsítvány kiválasztása és lenyomatok aláírása (ez a dokumentum nem tér ki ennek a működési módnak a használtára) SELECT_CERTIFICATE: csak tanúsítvány kiválasztása (ez a dokumentum nem tér ki ennek a működési módnak a használtára) SIGN: csak lenyomatok aláírása (a továbbiakban ezt mutatjuk be példákkal) SPName: szolgáltató neve (szabad szöveges mező); a MicroSigner alkalmazás ablakának Szolgáltató mezőjében megjelenő információ message: üzenet (szabad szöveges mező); a MicroSigner alkalmazás ablakának Üzenet mezőjében megjelenő információ certificate: base64 kódolt tanúsítvány hashalgorithm: a lenyomatok típusát meghatározó OID sha1 lenyomat aláírása esetén: 1.3.14.3.2.26 sha256 lenyomat aláírása esetén: 2.16.840.1.101.3.4.2.1 sha384 lenyomat aláírása esetén: 2.16.840.1.101.3.4.2.2 sha512 lenyomat aláírása esetén: 2.16.840.1.101.3.4.2.3 SSL/TLS kapcsolat kiépítésének folyamatában keletkező adat aláírása esetén üres sztringet kell megadni

documents: dokumentumok; JSON objektumok tömbje; a tömbben egy JSON objektumnak az alábbi mezőket kell tartalmaznia: name: dokumentum neve unsignedhash: base64 kódolt aláíratlan lenyomat Sztringgé konvertált JSON objektum PKCS#7 formátumú aláírása. Az aláíráshoz szükséges aláíró tanúsítványt a Microsec-től kell igényelni! PKCS#7 formátumú aláírás felküldése a közvetítő szerverre: URL: https://proxy.microsigner.com/esign/newsigningsession Metódus: POST Hitelesítés módja: felhasználónév/jelszó Elvárt Content-Type: application/x-pkcs7-mime A szerver válasza egy JSON objektum, ha a HTTP státuszkód értéke 200 vagy 420. A JSON objektum az alábbi mezőket tartalmazza 200-as HTTP státuszkód esetén: sessionurl: munkamenet általános URL-je sessionid: munkamenet azonosítója mode: működési mód documentids: dokumentumok azonosítói A JSON objektum az alábbi mezőket tartalmazza 420-as HTTP státuszkód esetén: code: kód; lehetséges értékek: ERROR: a művelet végrehajtása közben hiba történt message: üzenet A szerver válaszolhat 500-as HTTP státuszkóddal is, ha a HTTP kérés feldolgozása során ismeretlen hiba történt. Példa PHP-ban // Aláíratlan lenyomat(ok) előállítása file_put_contents('signer_certificate.cer', $_POST['certificate']); $last_line = exec("eszigno3 pdf_sign in input.pdf out half_signed.pdf signer_cert signer_certificate.cer"); $last_line = exec("eszigno3 pdf_get_unsigned_hash in half_signed.pdf out unsigned_hash_base64_encoded.txt"); $unsignedhash = file_get_contents('unsigned_hash_base64_encoded.txt'); // JSON objektum létrehozása $new_signing_session_request = array( 'mode' => 'SELECT_CERTIFICATE_AND_SIGN', 'SPName' => 'Test', 'message' => 'Test', 'certificate' => $_POST['certificate'], 'hashalgorithm' => '2.16.840.1.101.3.4.2.1', 'documents' => array( 0 => array( 'name' => 'Test.pdf' 'unsignedhash' => $unsignedhash )

) ); $new_signing_session_request_str = json_encode($new_signing_session_request); // Karakterfüzérré konvertált JSON objektum PKCS#7 formátumú aláírása file_put_contents('tmp.json', $new_signing_session_request_str); openssl_pkcs7_sign('tmp.json', 'tmp.p7m', 'signing_certificate_and_private_key.pem', array('file://signing_certificate_and_private_key.pem', '<passphrase>')); $data_to_post_str = file_get_contents('tmp.p7m'); // PKCS#7 formátumú aláírás felküldése $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://proxy.microsigner.com/esign/setunsignedhashes'); curl_setopt($ch, CURLOPT_USERPWD, '<username>:<password>'); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/pkcs7-signature', 'Content-Length: '. strlen($data_to_post_str)) ); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_post_str); curl_setopt($ch, CURLOPT_SSLVERSION, 1); // CURL_SSLVERSION_TLSv1 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response_str = curl_exec($ch); curl_close($ch); $response = json_decode($response_str); $sessionid = $response->sessionid; $documentid = $response->documentids[0]; Weboldal generálása Elvégzendő programozási feladatok jquery és ESign javascript library-k meghivatkozása ESign objektum létrehozása, callback-ek megírása onsuccessgetsignedhashes: ez a függvény fog meghívódni, ha a felhasználó aláírta az aláíratlan lenyomatokat; a függvénynek egyetlen paramétere az base64 kódolt aláírt lenyomatok tömbje A közvetítő szerver válaszának elhelyezése egy javascript változóban, hogy paraméterként átadható legyen az ESign objektum sign metódusának Hidden IFRAME és A tag-ek elhelyezése Az ESign objektum sign metódusának meghívása (például egy BUTTON tag onclick eseménykezelőjének segítségével)

Példa <!DOCTYPE html> <html> <head> <title>test</title> <!-- jquery javascript library meghivatkozása --> <script src="/jquery.js"></script> <!-- ESign javascript library meghivatkozása --> <script src="https://proxy.microsigner.com/esign/js/esign.js"></script> <script> esign_log = true; // ESign objektum létrehozása var esign = new ESign({'baseURL':'https://proxy.microsigner.com/esign'); // A közvetítő szerver válaszának elhelyezése egy javascript változóban // Az itt szereplő JSON sztring a PHP példában a $response_str változó értéke var newsigningsessionresponse = {"sessionurl":"https://proxy.microsigner.com/esign/getconfig", "sessionid":"zgp6zvlgxj89", "mode":" SIGN","documentIds":["85obxs7ev96l"]; // callback-ek function testonsuccessgetsignedhashes(signedhashes) { sendsignedhash(signedhashes[0]); </script> </head> <body> <h1>test</h1> <!-- Hidden IFRAME és A tag-ek elhelyezése --> <iframe name="iframe_esign" style="display: none;"></iframe> <a target="iframe_esign" href="javasript:void(0)" id="a_esign"></a> <!-- Az ESign objektum sign metódusának meghívása (például egy BUTTON tag onclick eseménykezelőjének segítségével) --> <button onclick="esign.sign(newsigningsessionresponse, 'a_esign', testonsuccessgetsignedhashes);">sign</button> </body> </html> Aláírt lenyomatok beillesztése Elvégzendő programozási feladatok Aláírt lenyomatok beillesztése Példa PHP-ban // Aláírt lenyomatok beillesztése $last_line = exec("eszigno3 pdf_set_signed_hash in half_signed.pdf out signed.pdf hash '". $_POST['signedHash']. "'");

Figyelem! A fenti példa parancs beszúrási támadásra ad lehetőséget, ezért a kliens által felküldött paramétert validálni kell! Bővebb információ: https://www.owasp.org/index.php/command_injection

Az ESign alapértelmezett viselkedésének megváltoztatása a weboldalon Lehetőség van megváltoztatni az ESign alapértelmezett viselkedését a weboldalon bizonyos függvényeinek felüldefiniálásával. onconfigajaxfailure(jqxhr, textstatus) Akkor hívódik meg, ha kapcsolódási hiba történt annak ellenőrzése közben, hogy a MicroSigner alkalmazás elindult-e. onconfignotgot(counter) Alapértelmezetten 1000 ms-ként meghívódik, amíg a MicroSigner alkalmazás el nem indul. A counter paraméter tartalmazza, hogy eddig hányszor hívódott meg a függvény. A függvénynek false-szal vagy true-val kell visszatérnie. Ha a függvény false-szal tér vissza, akkor a folyamat megszakításra kerül. onconfiggot() Akkor hívódik meg, ha a MicroSigner alkalmazás elindult. onsignedhashesajaxfailure(jqxhr, textstatus) Akkor hívódik meg, ha kapcsolódási hiba történt annak ellenőrzése közben, hogy a lenyomatok aláírásra kerültek-e. onsignedhashesesignfailure(status) Akkor hívódik meg, ha a lenyomatok aláírása során felhasználói megszakítás vagy hiba történt. A paraméterként kapott status objektum code és message mezőinek segítségével további információhoz juthatunk. Pl.: ha status.code értéke CANCEL, akkor a felhasználó kérésére szakadt meg a folyamat. onsignedhashesnotgot(counter) Alapértelmezetten 1000 ms-ként meghívódik, amíg a lenyomatok aláírásra nem kerülnek. A counter paraméter tartalmazza, hogy eddig hányszor hívódott meg a függvény. A függvénynek false-szal vagy true-val kell visszatérnie. Ha a függvény false-szal tér vissza, akkor a folyamat megszakításra kerül. Példa (JavaScript) esign.onconfigajaxfailure = esign.onsignedhashesajaxfailure = function (jqxhr, textstatus) { removeprogressbarwithindeterminatevalue(); showmodaldialog('ajax error: ' + textstatus);

esign.onsignedhashesesignfailure = function (status) { removeprogressbarwithindeterminatevalue(); if (status.code!== 'CANCEL') { showmodaldialog('esign error!\ncode: ' + status.code + '\nmessage: ' + status.message); esign.onconfignotgotdefault = function(counter) { if (counter % 30 === 0) { if (confirm('it seems, that e-sign application did not start. Would you like to wait more?')) { return true; else { removeprogressbarwithindeterminatevalue(); return false; return true; esign.onsignedhashesnotgotdefault = function(counter) { if (counter % 30 === 0) { if (confirm("it seems, that no hashes were signed. Would you like to wait more?")) { return true; else { removeprogressbarwithindeterminatevalue(); return false; return true;