Agora
Media
Libraria Byblos



AgoraNews  





PC Magazine Ro  




NET Report   




Ginfo   




agora ON line   





PC Concrete   





Liste de discuții   




Cartea de oaspeți   




Mesaje   





Agora   








Clic aici
PC Report - ultimul numar aparut


IPRO - PC Magazine Romania, 2002
Comunitatea experților și a cititorilor PC Magazine - Internet PRO

XMLRPC, o cale de a ieși din izolare
Un raport despre experiențele câștigate cu RSA SecureID și XMLRPC

Florian Lindauer

O componentă importantă a fiecărui serviciu internet o reprezintă partea de autentificare a utilizatorilor. Într-un mediu în care cerințele de securitate sunt foarte ridicate, modelul uzual "login + parolă" nu mai poate satisface aceste cerințe, chiar dacă transmisia datelor se face folosind SSL (Secure Socket Layer). Cu ajutorul protocolului SSL datele de autentificare a utilizatorului sunt transmise codificat, ele putând fi totuși spionate. O primă soluție ar fi parolele de unică folosință. Ele sunt valabile doar pentru o singură utilizare, după folosire nemaifiind de nici un ajutor pentru potențialii agresori. Dacă parolele de unică folosință sunt emise câteva secunde înainte de utilizarea lor, atunci riscul de a fi spionate sau folosite împotriva voinței posesorului poate fi exclus. O soluție matură pentru rezolvarea problemelor de genul celor discutate mai sus o constituie produsul SecurID (vezi caseta) al Companiei RSA (http://www.rsasecurity.com/). Firma SecureNet (http://www.secure-net.de) a folosit această tehnologie în proiectul MCdialog.net (http://www.mcdialog.net).

RSA SecurID
Soluția "SecurId" se bazează pe două lucruri distincte: un token hardware (de genul unei cărți de credit - să îl numim SecurId - card sau pe scurt card) și un secret (o parolă și/sau un număr de pin). Cardul dispune de un display care afișează o parte integrantă din parolă în forma unui cod (alfa)numeric ce se schimbă din minut în minut. Utilizatorul folosește acest cod precum și pin-ul pe care numai el îl știe. Numai cine are atât pin-ul cât și codul parolei se poate autentifica: spionarea numărului de pin nu folosește celui care nu deține și cardul de generare a codului parolei. Astfel, SecurID generează neîncetat parole de unică folosință care sunt valide doar un timp limitat. Modul de generare a parolei nu poate fi descifrat pe baza parolelor generate anterior.

Diferit de modul de lucru al RSA (generarea unei Public-Key) este faptul că numai modulul hardware (cardul) și serverul dețin Secret-Key, deci această cheie este protejată în totalitate. Totodată și codul generat pentru parolă va avea o lungime mult mai mică în comparație cu lungimea unei chei de genul Public-Key. Atâta timp cât serverul este protejat, nu există nici un risc pentru aflarea Secret-Key. Din aceste motive această tehnologie este apreciată în cercurile de specialitate ca fiind foarte sigură.


Pentru autentificarea utilizatorilor cu SecurID trebuie instalat un server special - RSA ACE/Server, care verifică permanent pin-ul transmis și codul parolei. În momentul implementării proiectului MCdialog.net nu există un API Java pentru acest server iar API-ul C era disponibil numai sub Solaris, neaplicabil însă pe o platforma Linux. Între timp se poate ca lucrurile să se fi schimbat, dar poziția inițială este adesea regăsită și în celelalte cazuri: cine dorește să folosească serviciul este restricționat de platforma, limbajul de programare și/sau protocolul de comunicare.

În cazul nostru am folosit serviciul "Autentificarea SecurID" pentru cerințele unei aplicații Servlet Java. Dincolo de funcțiile specifice administrării utilizatorilor, va fi folosit numai serviciul cu semnătura "boolean is_valid" (codul parolei pentru a face disponibil codul pin). Acest serviciu trebuie să fie disponibil pentru adresare direct din aplicația Java. Aici intră în scenă XMLRPC.

XMLRPC
(http://www.xmlrpc.com/) reprezintă un protocol standard de comunicare pentru folosirea la distanță a diverselor servicii web. Pentru acest protocol există implementări pe toate platformele și pentru aproape toate limbajele de programare, inclusiv limbaje larg răspândite ca Java sau C(++). Exemplul următor prezintă o secvență de cod de bază pentru realizarea autentificării serverului cu o interfață XMLRPC în C, precum și descrierea folosirii sale în Java.

Serverul
Serverul SecurID ACE rulează pe o platformă Solaris care este conectată prin rețea cu un server web sub Linux. Pe Solaris este disponibil API-ul C ce poate furniza funcționalitatea dorită pentru serverul RSA. Pe Linux se creează un mic program server (daemon), care în caz contrar ar rula pe Solaris, și care poate fi adresat prin intermediul interfeței XMLRPC.

Exemplu:
static xmlrpc_value *
checkLogin (xmlrpc_env *env, xmlrpc_value *param_array, void *user_data)
{
xmlrpc_int32 status=0;
char *login,*pin,*passcode;
// get input parameters
xmlrpc_parse_value(env, param_array, "(ssss)", &login, &pin, &passcode);
if (env->fault_occurred) return NULL;
// validity check against RSA ACE Server
status=checkPasscode(login, passcode, pin);
// send result
return xmlrpc_build_value(env, "{s:i}", "status", status);
}
int main (int argc, char **argv)
{
// Prepare request handling
xmlrpc_server_abyss_init(XMLRPC_SERVER_ABYSS_NO_FLAGS, "conf/abyss.conf");
// Add all the xmlrpc-methods we provide
xmlrpc_server_abyss_add_method_w_doc(
"securid.checkLogin", &checkLogin, NULL, "i:sss",
"Check validity of login, pin and passcode at the current time");
// Process requests
xmlrpc_server_abyss_run();
}

Clientul
Folosirea serviciului cu Java devine simplă. Este nevoie de unul din numeroșii clienți XMLRPC Java pentru apelarea funcțiilor disponibile. Mai jos este prezentat fragmentul de cod.

public int checkSecurId(String user, String passcode, String pin)
throws SomeSecurityException
{
try
{ XmlRpcClient server = new XmlRpcClient(XMLRPC_RSAACE_URL);
6 Helma XMLRPC-Implementierung für Java: xmlrpc.helma.org
Vector params = new Vector();
params.addElement(user);
params.addElement(pin);
params.addElement(passcode);
Hashtable xresult=(Hashtable)server.execute("securid.checkLogin", params);
result=((Integer)xresult.get("status")).intValue();
return result;
}
catch(Exception e)
{ log.debug("SecurID-xmlrpc: Exception: "+e.getMessage());
throw new SomeSecurityException("system-failure: authentication");
}
}
Pentru apelarea metodei, Clientul generează un obiect Request (codat XML) care cuprinde metoda și parametrii doriți și care este transportat de protocolul HTTP.

<?xml version="1.0"?>
<methodCall>
<methodName>securid.checkLogin</methodName>
<params><param><value><string>somelogin</string></value></param>
<param><value><string>1234</string></value></param>
<param><value><string>987654</string></value></param>
</params>
</methodCall>

Răspunsul Serverului conține parametrii rezultați - în cazul eșecului autentificării avem status 1=Login invalid

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params><param><value><struct><member>
<name> status </name>
<value><i4> 1 </i4></value></member>
</struct></value></param></params>
</methodResponse>

Concluzii
XMLRPC este o tehnologie flexibilă, larg răspândită, puternică și în același timp simplu de integrat și folosit chiar în proiecte mari, în care părți ale acestora rulează distribuit în rețeaua proprie sau în internet. Din acest motiv această tehnică este de recomandat pentru împachetarea micilor servicii oferite de diverse firme în scopul de a le face disponibile acolo unde este nevoie de ele. Este de sperat, dar și de așteptat, ca în viitorul apropiat tot mai multe companii să își înzestreze produsele software cu interfețe către XMLRPC sau către tehnologii echivalente, de exemplu SOAP, tocmai în scopul unei intercomunicări necomplicate între diferitele componente software necesare în viața de zi cu zi a afacerilor moderne.

Referințe
- "Java and XML", Brett McLaughlin, O'Reilly, USA, June 2000
- MCDialog.Net - http://www.mcdialog.net
- RSA Security Inc. - http://www.rsasecurity.com/
- XML-RPC Home Page - http://www.xmlrpc.org
- XML-RPC for C and C++ -
http://xmlrpc-c.sourceforge.net.

[Traducere și adaptare Liviu Marinescu, SecureNet S.R.L. ]


PC Magazine Ro | CD ROM | Redactia | Abonamente | CautareArhive

Copyright © 1999-2002 Agora Media.

[email protected]

LG - LifeŽs Good

www.agora.ro

deltafri

Concurs de Grafica Digitala si Web Design

www.agora.ro

www.agora.ro