• Nenhum resultado encontrado

Descr ever em os nesse Capít ulo a im plem ent ação, na plat afor m a CORBA, do Ser viço de Cer t ificação Digit al pr opost o nesse t r abalho. No pr oj et o da im plem ent ação, pr im eir am ent e especificam os a int er face do ser viço, de acor do com o que foi det er m inado no Capít ulo 4. Em seguida, especificam os as int erfaces relat ivas às ent idades que com põem o serviço de cert ificação digit al. Essa segunda par t e é específica da im plem ent ação CORBA r ealizada, no ent ant o visa cum prir o obj et ivo de por t abilidade par a diver sos t ipos de ent idades cer t ificador as. Ou sej a, na im plem ent ação foi ut ilizada um a CA específica im plem ent ada com o um obj et o CORBA, por ém pr evendo que pode vir a ser ut ilizada qualquer out r a CA.

O am bient e de im plem ent ação do ser viço é com post o pela linguagem Java, pela plat aform a CORBA e pelo LDAP. A im plem ent ação CORBA ut ilizada foi a que est á incluída no J2SDK 1.4. A linguagem de program ação ut ilizada para im plem ent ação dos obj et os e dos client es foi a linguagem Java. O Ser viço de

diret ór io ut ilizado foi o LDAP, especificam ent e a im plem ent ação OpenLDAP, por ser um soft w ar e livr e.

A Seção 5.1 m ost r a o diagr am a de classes especificado par a a im plem ent ação do ser viço. A Seção 5.2 com ent a, br evem ent e, sobr e a im plem ent ação, ilust r ando t r echos de códigos de alguns dos pr incipais m ét odos. Na Seção 5.3 é apr esent ado um est udo de caso em que ilust r am os com det alhes o código de um a aplicação que ut iliza a im plem ent ação do serviço de cert ificação.

5 . 1 C l a s s e s

Na Figur a 5.1 é m ost r ado o diagr am a de classes que especifica as classes im plem ent adas.

A classe COSCer t ificat ionSer vice r epr esent a o ser viço com o um t odo, agr egando os com ponent es do ser viço.

A classe Dir ect or ySer vice é r esponsável por fazer acesso ao OpenLDAP par a ar m azenar / r ecuper ar obj et os, além de ser r esponsável por det er m inar o cam inho de cer t ificação, que ser á abor dado post er ior m ent e.

A classe Cer t ificat ionAut hor it y r epr esent a a ent idade cer t ificador a, responsável por criar cert ificados de ident idade ( I dent it yCer t ificat e) , validar os t ipos de cer t ificados, r ecuper ar st at us de um cer t ificado ( válido,r evogado) , solicit ar ao serviço de diret ór io a publicação/ localização de cert ificados e list as de r evogação.

A classe At t r ibut eAut hor it y r epr esent a a aut or idade r esponsável por criar cer t ificados de at r ibut os, solicit ar cert ificados de ident idade e validar os dem ais t ipos de cert ificados. Ela t am bém at ua com LRA, fazendo solicit ações a ent idades cert ificadoras e t em com o função solicit ar rev ogações de cert ificados e aut ent icações de inform ação de t it ulares de cert ificados.

A classe Cer t ificat e é um a gener alização dos t ipos de cer t ificados, concent r ando infor m ações com uns aos dem ais t ipos cer t ificados. As classes I dent it yCer t ificat e, At t r ibut eCer t ificat e e Pr oxyCer t ificat e r epr esent am r espect ivam ent e o cer t ificado de ident idade, o cer t ificado de at r ibut os e os prox y cer t ificat es, que for am abor dados nos Capít ulos ant er ior es.

A classe Revogat ionList represent a a list a de revogação que est á associada a um a CA, pois t oda CA possui apenas um a list a de r evogação. Essa, por sua vez, é publicada no OpenLDAP, at r avés da classe Dir ect or ySer vice.

A classe Tr ust Hier ar chy é ut ilizada para especificar a relação de confiança ( quem confia em quem ) , necessár ia par a dar supor t e a const r ução do

cam inho de validação. Assim é possível um a ent idade configur ar em quais out r as ent idades do ser viço ou do sist em a ela confia.

5 . 2 D e s c r i ç ã o

Na im plem ent ação do m ét odo par a cr iação de cer t ificados de ident idade e de pr oxy, par a ger ação de chaves foi ut ilizado o pacot e j ava.secur it y. A Figur a 5.2 r efer e- se ao código da ger ação do par de chaves, pr ivada e pública, e a ger ação da assinat ur a.

Figu r a 5 .2 : Tr e ch o de código pa r a ge r a çã o de ch a v e s.

Os obj et os usados nesse código são obj et os disponibilizados pelo pacot e j ava.secur it y. São eles: KeyPair Gener at or , Secur eRandom , KeyPair , PublicKey, Pr ivat eKey e Signat ur e. Na linha 1 o obj et o do t ipo KeyPair Gener at or é cr iado ut ilizando, par a ger ação de chaves cr ipt ogr áficas, o algor it m o DAS( Digit al Signat ur e Algor it hm ) pr ovido pela SUN. Na linha 2 é cr iada um a inst ância do obj et o Secur eRandom que é um gerador seguro de num ero aleat ór ios, ut ilizando o algor it m o especificado, no caso o “ SHA1PRNG” que segue a especificação do I EEE P1363. Na linha 3 é iniciado o processo de geração de chaves, com t am anho 1024 e ut ilizando o obj et o par a ger ação de núm er os aleat ór ios. Em seguida é ger ado o par de chaves ( pr ivada/ pública) e ent ão é iniciado o pr ocesso de assinat ur a. Ut ilizam os a r efer ência do obj et o com o dado a ser assinado, j á que no pr ocesso convencional é assinado com base nas infor m ações do usuár io.

1 KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA",

"SUN");

2 SecureRandom random = SecureRandom.getInstance("SHA1PRNG",

"SUN");

3 keyGen.initialize(1024, random);

4 KeyPair pair = keyGen.generateKeyPair(); 5 PrivateKey priv = pair.getPrivate(); 6 PublicKey pub = pair.getPublic();

7 Signature dsa = Signature.getInstance("SHA1withDSA", "SUN”); 8 dsa.initSign(privPk);//Chave privada da entidade emissora

Depois desses passos é cr iado o obj et o do t ipo I dent it yCer t ificat e, que se r efer e ao cert ificado de ident idade.

Par a publicar os cer t ificados e list a de r evogações, ut ilizam os a API do Java j avax.nam ing e j avax.nam ing.dir ect ory que ofer ece supor t e a m anipulação de dir et ór ios. O OpenLDAP ofer ece schem as par a ar m azenar t ant o obj et os CORBA com o obj et os Java, essa car act eríst ica facilit a a im plem ent ação do ser viço. O t recho de código da Figur a 5.3 descr eve a par t e do código da classe Dir ect or y Ser vice que faz a com unicação com o OpenLDAP.

Figu r a 5 .3 : Pu blica çã o de obj e t os n o se r v iço de dir e t ór io.

A linha 2 cr ia um obj et o Dir Cont ext que pr ovê m ét odos par a m anipulação de ser viços de dir et ór ios. O par âm et r o passado par a o const rut or I nit ialDirCont ext é um a Hasht able que cont ém a configur ação par a r ealizar o acesso ao ser viço de dir et ór ios. Na linha 3 o obj et o é ar m azenado no OpenLDAP. Vale r essalt ar que, par a colocar um a ent rada num ser viço de dir et ór io, é necessár io associar um DN ( Dist inguished Nam e) que deve ser único no escopo dos dir et ór ios, t al que, par a acessar esse obj et o, bast a saber o DN.

Para realizar o cam inho de cert ificação é necessário configurar a hier ar quia das ent idades, ou sej a, quem confia em quem . Os m ét odos t r adicionais ut ilizam o cam inho at r avés do cert ificados das CA. Porém , nesse t r abalho, pr evem os t am bém que o obj et o que est ej a ofer ecendo um det er m inado ser viço não sej a cer t ificado por nenhum a ent idade, o que, pelo m ét odo t radicional, seria im possível que esse serviço fosse ut ilizado, devido à falt a de cer t ificação. Par a evit ar esse pr oblem a, um obj et o deve configur ar as ent idades cer t ificador as nas quais ele confia, de t al que for m a que sej a possível validar o

1 try{

2 DirContext dir=new InitialDirContext(env); 3 dir.rebind(dn,obj);

cer t ificado. Ent ão, par a que um client e ut ilize seus serviços, ele deve apresent ar um cer t ificado, sej a de ident idade, at r ibut o ou pr oxy. Par a dar supor t e a configur ação da r elação de confiança, definim os um a int er face cham ada Tr ust Hier archy que especifica em quais ent idades ( CA,AA) um a det er m inada ent idade confia, de t al for m a que, possam os r ealizar t al pr ocesso, com o foi especificado no Capít ulo 2. Na Figura 5.4 t em os um a descr ição de um a hier ar quia exem plo ut ilizado no est udo de caso, que abordarem os na próxim a Seção.

Figu r a 5 .4 : H ie r a r qu ia de con fia n ça .

Est a Figur a m ost r a que um a det er m inada Ent idade A solicit a serviços de um a ent idade B. Par a isso, a ent idade B requisit a a apresent ação de um cert ificado, que foi em it ido pela CA denom inada Cer t Sign par a a Ent idade A. Com o a ent idade B não t em r elação dir et a de confiança com a ent idade A, é necessár io encont r ar o pont o de confiança m út uo que for nece supor t e par a essa validação, ou sej a, a CA AndSign. Na im plem ent ação, dado um det er m inado obj et o, pr ocur a- se t oda sua hier ar quia par a encont r ar o pont o com um ent r e dois

obj et os. Caso não haj a pont o em com um , o cer t ificado não é aceit o pela ent idade pr ovedor a dos ser viços. O pont o em com um diz r espeit o à CA em que am bas as ent idades confiam . De posse dessa CA, é dada cont inuidade ao pr ocesso de validação, onde se ver ifica se o cer t ificado é válido. Passos adicionais podem ser necessár ios dependendo do t ipo de cer t ificado. Por exem plo, no caso de cer t ificados de at r ibut os deve- se analisar a quest ão dos papéis que o cert ificado especifica par a o seu propr iet ár io.

Figu r a 5 .5 : Código pa r a e n con t r a r pon t o de con fia n ça m ú t u o.

No t r echo de código da Figur a 5.5 é ilust r ado o fr agm ent o de duas funções ut ilizadas par a encont r ar o pont o de confiança m út uo. Na pr im eir a par t e é r ealizada um a busca em pr ofundidade onde, dado um pont o de or igem , pr ocur am - se t odos os nós ( CA) que com põem a sub- hier ar quia a par t ir da or igem . Com o desej am os saber o pont o em com um ent r e dois pont os, bast a r ecuper ar as sub- hier ar quias de am bos os pont os par a em seguida pr ocur ar por pont os em com um dent r e essas sub- hier ar quias. Caso exist a esse pont o em com um , é ret or nada a CA cor r espondent e a t al pont o em com um . Se o r et or no for difer ent e de nulo, o obj et o que r ecebeu o cer t ificado confia na ent idade em issor a do m esm o, podendo assim ocor r er a validação do cer t ificado.

1 CertificationAuthority ca=getCA(_env,_caName); 2 for(int i=0;i<ca.trt.trustedEntities.size();i++){

3 hierarq.addElement(ca.trt.trustedEntities.elementAt(i));

4 trustedHierachy((String)ca.trt.trustedEntities.elementAt(i),hierarq,_env); 5 }

//Localiza Ponto eh comum

1 for(int i=0;i<caT1.size();i++){

2 if (caT2.indexOf(caT1.elementAt(i))!=-1){

3 return getCA(_env,(String)caT1.elementAt(i)); 4 }

Os cer t ificados de at r ibut os são ext r em am ent e im por t ant es par a at r ibuição de papéis, que definem os aspect os de segur ança em t er m os de per fis.

Figu r a 5 .6 : Adicion a r / r e cu pe r a r a t r ibu t os do ce r t ifica do de a t r ibu t os.

O t r echo de código da Figur a 5.6 ilust r a os m ét odos per t encent es ao cer t ificado de at r ibut os r esponsáveis por adicionar / r ecuper ar at r ibut os no cam po específico par a colocar a list a de par es ( nom e,valor ) .

No pr ocesso de validação de cer t ificados ver ifica- se se o m esm o est á válido ( não expir ado, não r evogado) . No t recho de código da Figur a 5.7 t em os o pr ocesso de validação da assinat ur a da ent idade em issor a. No código est ão os passos necessár ios par a validar a assinat ur a da ent idade em issor a, ut ilizando a chave publica da m esm a. I nicialm ent e é inst anciado um obj et o do t ipo Signat ur e com o algor it m o “ SHA1w it hDSA” . Em seguida, t em início o pr ocesso de ver ificação, passando a chave pública da ent idade em issor a do cert ificado. Na seqüência analisa- se se assinat ur a cont ida no cer t ificado r ealm ent e cor r esponde a assinat ura da ent idade em issor a, par a que, em seguida, o m esm o possa ser validado ou não.

Figu r a 5 .7 : V a lida çã o d a ch a v e pú b lica .

1 public void addAttribute(String attName,Object value){ 2 this.attributes.put(attName,value);

3 }

4 public Object getAttribute(String attName){ 5 return this.attributes.get(attName); 6 }

1 Signature sig = Signature.getInstance("SHA1withDSA", "SUN"); 2 sig.initVerify(pubKey);

3 sig.update(obj.toString().getBytes()); 4 if (!sig.verify(cert.assinatura())) 5 return false;

5 . 3 E s t u d o d e C a s o : S i s t e m a d e C o n t r o l e

B a n c á r i o

Nest a Seção discut ir em os um est udo de caso que dem onst r a as funcionalidades do serviço de cert ificação digit al im plem ent ado na plat aform a CORBA. Nesse est udo de caso são m ost r adas sit uações em que podem os facilm ent e dest acar o uso de r equisit os de segur ança, com r elação à cer t ificação. A aplicação sim ula o funcionam ent o sim plificado de um banco.

Os r equisit os de segur ança, ut ilizados pela aplicação bancár ia são: Cont r ole de Acesso, Aut ent icação e Delegação. O sist em a de Cont role Bancár io pr ovê funcionalidades com o: aber t ur a e encer r am ent o de cont as, oper ações de m ovim ent ação de cont a corr ent e ( saldo/ ext r at o, saque, depósit o e t r ansfer ências) .

O m ódulo AppBancar ia cont ém a im plem ent ação dos obj et os ut ilizados, sendo est es o obj et o de Cont a ( Account ) , Client e ( Client ) e Banco ( Bank) , que est ão r epr esent ados na Figur a 5.8.

A classe Client possui dois at r ibut os par a guar dar nom e e t elefone do client e. Ver em os post er ior m ent e que, ut ilizando cer t ificados de at r ibut os, podem os colocar m ais dados par a o m esm o. A classe Account provê m ét odos par a m anipulação de cont as, r ecuper ação de saldos, r ealização de depósit os e saques, além de r ecuperação de infor m ações sobr e o propr iet ár io da m esm a. A classe Bank ofer ece oper ações par a cr iar novas cont as, ar m azenar as cont as cr iadas, encer r ar cont as e r ealizar t r ansfer ências ent r e as cont as, além de fazer aut ent icação de senha. Essas classes r epr esent am os obj et os CORBA im plem ent ados. Not e que pode haver difer enças ent r e a especificação I DL e o diagr am a de classes. Essas difer enças r efer em - se aos t ipos ut ilizados, pois no diagr am a de classe foi ut ilizado com o base a linguagem j ava, e na int er face, especificam os apenas os ser viços ofer ecidos pelo obj et o. Por t ant o, alguns m ét odos e at r ibut os, específicos da linguagem Java, não est ar ão present es na descr ição I DL. As Figur as 5.9, 5.10 e 5.11 ilust r am as int er faces dos obj et os

pr incipais do sist em a, em confor m idade com a Figur a 5.8.

Figu r a 5 .9 : I n t e r fa ce Clie n t . 1 interface Client{

2 string getName();

3 void setName(in string name); 4 string getTelephone();

5 void setTelephone(in string telephone);

6 Client newClient(in string name,in string telephone); 7 };

Figu r a 5 .1 0 : I n t e r fa ce Ba n k

Figu r a 5 .1 1 : I n t e r fa ce Accou n t

Par a im plem ent ação desse est udo de caso, assim com o par a a im plem ent ação do ser viço de cer t ificação digit al, foi ut ilizada a linguagem Java. A aplicação é com post a por t r ês par t es principais que int er agem com o ser viço de cer t ificação:

x A classe Ser ver , responsável pela inst alação das im plem ent ações dos obj et os que ofer ecem os ser viços descr it os ant er ior m ent e e dão supor t e a r equisição das oper ações;

x A classe Manager , responsável pela cr iação de cer t ificados de ident idade e de at r ibut os, definição de papéis ( nesse est udo de caso o cer t ificado de at r ibut os cont ém infor m ações sobr e o t ipo de client e – especial ou r egular ) , út eis par a confer ir pr ivilégios específicos e ger enciar t ipos de m ovim ent os;

1 interface Bank{

2 Account createAccount(in string password,in Client owner); 3 Account getAccount(in long accNumber,in string password); 4 short transfer(in long id_Source,in string password,in double amount,in long id_Dest); 5 void close(in long accNumber);

6 long getSize(); 7 };

1 interface Account{

2 void deposit(in double amount); 3 void withdraw(in double amount); 4 double balance();

5 string getPassword();

6 void changePassword(in string password); 7 Client getOwner();

8 void setOwner(in Client Owner); 9 void setAccNumber(in long number); 10 long getAccNumber();

x A classe Client que, com base nas configurações especificadas na classe Manager, ut iliza os pr ocessos de validação, aut ent icação e delegação - funcionalidades essas ofer ecidas pelo serviços.

Figu r a 5 .1 2 : I n st a la çã o do se r v iço de ce r t ifica çã o n o se r v idor .

Na classe Server é feit a a inst alação das im plem ent ações no servidor e associação do obj et o no serviço de nom e para facilit ar a localização dos m esm os. Para carregar o serviço, devem os inst alar a sua im plem ent ação. Um a vez inst alada, é possível invocar as funcionalidades do serviço. O t recho de código da Figur a 5.12 ilust r a a inst alação da im plem ent ação do ser viço de cer t ificação. O t r echo de código da Figur a 5.13 ilust r a os passos necessár ios par a inst alar a im plem ent ação do obj et o Account .

Figu r a 5 .1 3 : I n st a la çã o da im ple m e n t a çã o do obj e t o Accou n t

O t r echo de código ilust r ado na Figur a 5.14 m ost r a a im plem ent ação do m ét odo cr eat eAccount da classe Bank, que r ecebe com o par âm et r os a senha e a r efer ência ao obj et o do t ipo Client .

1 COSCertificationServiceImpl certService=new COSCertificationServiceImpl(); 2 certService.setORB(orb);

3 objRef=rootPOA.servant_to_reference(certService); 4 COSCertificationService certServiceRef =

COSCertificationServiceHelper.narrow(objRef); 5 ncRef.rebind(ncRef.to_name(“COSService”),certServiceRef);

1 AccountImpl accImpl=new AccountImpl(); 2 accImpl.setORB(orb);

3 objRef=rootPOA.servant_to_reference(accImpl); 4 Account accountRef=AccountHelper.narrow(objRef); 5 ncRef.rebind(ncRef.to_name("Account"),accountRef);

Figu r a 5 .1 4 : Cr ia çã o de u m a n ov a con t a .

Par a im plem ent ar obj et os CORBA usando o Java, é necessár io const r uir um a classe Ser vant que represent a a im plem ent ação a ser regist rada no ser vidor . Ut ilizando o pr ogr am a idlj , que r ealiza o binding ent r e as linguagens idl e j ava, é ger ado um conj unt o de classes que ser vem de supor t e par a im plem ent ação do obj et o. O obj et o acc, na linha 4, é um ser vant par a o obj et o Account . Par a que sej a possível dist inguir as cont as r egist r adas no ser vidor , cada nova cont a t em um a r efer ência nova que per m it e ut ilizar m os a im plem ent ação cr iada, dist inguindo as cont as. As cont as são arm azenadas em um vet or . A classe abst r at a Account Helper possui um m ét odo nar r ow r esponsável por t r ansfor m ar obj et os da classe or g.om g.CORBA.Obj ect em um a inst ância da classe Account . Essa classe Account Helper foi gerada pelo com pilador idlj .

1 public Account createAccount(String password,Client cliente){ 2 try{

3 POA rootPOA=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

Documentos relacionados