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.

webmaster@pcmagazine.ro

LG - Life´s Good

www.agora.ro

deltafri

Concurs de Grafica Digitala si Web Design

www.agora.ro

www.agora.ro