• Sonuç bulunamadı

7.1.1 GES Motoru

GES sunucusunun ana bile eni GES motorudur. Uzak sunucular ile olan tüm ileti imler GES motoru arac ile sa lanmaktad r. GES motorunun görevlerinin ba calar unlard r:

- Uzak GES sunucular ile olan ileti imleri gerçeklemek

- Etmenler (dolay ile kabuklar) aras ileti imi gerçeklemek

- Etmen göçlerini sa lamak

GES motoru GES sunucusunun içinde çal düzene ba olarak oldukça karma k say labilecek görevleri yerine getirir. Standart düzende çal an bir GES sunucusunda GES motoru yukar da say lan görevleri yerine getiriyor olmas n yan nda, kimlik denetim bilgilerinin tutulmas , standart GES sunucular kimlik denetiminden geçirme, etmen ifreleme anahtarlar tutma ve da tma, güncel etmen listesini tutma ve da tma gibi daha bir çok görevi yerine getirmektedir.

Tablo 7.1.1.1, GES motoru fonksiyonlar ve ne amaçla kullan ld klar içermektedir.

Tablo 7.1.1.1 GES motoru fonksiyonlar

Metod Kullan m Amac

public Hashtable getAllAgents(Ticket tk) GGES ten güncel etmen listesi istenir.

public void registerAgenttoMasterBrowser(Ticket tk, AgentIdentity agentidentity)

GGES’e aktif olan bir etmenin kimli i bildirilir.

public void unregisterAgentfromMasterBrowser(Ticket tk, AgentIdentity agentidentity)

GGES’e pasif olan bir etmenin kimli i bildirilir.

public boolean serverUP(Ticket tk,String strAgentHostName) Herhangi bir GES sunucunun çal p çal mad kontrol edilir.

public boolean pingSM(String destinationSM) Herhangi bir GYGES’in çal p çal mad kontrolü yap r. public boolean _acceptMessage(Ticket tk,

MessagePacket packet)

Uzak GES sunucuda çal an etmenin yollad mesaj al r. public void _acceptReply(Ticket tk,MessagePacket packet) Uzak GES sunuya daha önce

gönderilen mesaj n yan al r. public void requestToTransfer(Ticket tk, AgentHost

agenthost, Voucher voucher, AgentIdentity agentidentity)

Etmenin uzak GES sunucuya transfer iste i bildirilir.

public void beginTransfer(Ticket tk, Voucher voucher, AgentIdentity agentidentity)

Etmenin uzak GES sunucuya transferi ba lat r.

public void endTransfer(Ticket tk,Voucher voucher,

AgentIdentity agentidentity)

Etmenin uzak GES sunucuya transferi bitirilir.

public byte[] transferResourceFile(Ticket tk, Voucher voucher, AgentIdentity agentidentity)

Etmenin kodu uzak GES sunucuya iletilir.

public byte[] transferDataFile(Ticket tk,Voucher voucher, AgentIdentity agentidentity)

Etmenin durumu (verisi) uzak GES sunucuya iletilir.

public byte[] transferPolicyFile(Ticket tk,Voucher voucher, AgentIdentity agentidentity)

Etmenin politikas uzak GES sunucuya iletilir.

public Ticket authenticateServer(String host,String key) GES sunucu GYGES ten kimlik denetimi yapar.

public boolean validateTicket(Ticket tk) GES sunucu herhangi bir bileti GYGES ten onaylar.

public boolean validateTicketforSMPartner(String partner, String authKey, Ticket tk)

GYGES sunucu kendisinde olmayan bir bileti orta olan GYGES ten onaylamas ister. public Policy getRemoteAgentPolicy(Ticket tk, AgentIdentity

agentidentity)

Uzak bir GES sunucuda çal an etmenin politikas al r. public boolean setRemoteAgentPolicy(Ticket tk, Policy

policy,AgentIdentity agentidentity)

Uzak bir GES sunucuda çal an etmenin politikas de tirilir. public String getAgentEncryptionKeyFromSM(Ticket tk) GES sunucu ifreli etmenlerin kod,

veri ve politikas çözecek anahtar GYGES ten ister.

7.1.1.1 GES Sunucu Güvenli leti im Protokolü

Çal düzen ne olursa olsun GES sunucular aras ndaki tüm ileti imler “SSL over RMI”[26] ad verilen protokol ile gerçekle tirilir. SSL protokolünin çal mas için de sertifika gerekti inden, her GES sunucusunun standart X.509[39] sertifika

yaratmalar için gerekli fonksiyonlar mevcuttur. GES sunucuyu yöneten programc yada yönetici yönetim modülü ile sunucu sertifikas yaratabilir. Di er bir GES sunucu ile sertifikalar kullan larak güvenli ileti imi sa lamak için ise haberle ece i GES sunucunun sertifikas n yerel sunucu üzerinde “güvenilir” nitelikte tan mlanm olmas gerekmektedir. Bu i leyi a daki ad mlarla yürümektedir. Haberle ecek sunucular A ve B sunucu olarak adland rsak;

- A sunucusu herkese aç k (public) ve özel (private) anahtar ikilisi olu turarak bunu konfigürasyon dosyas na kaydeder. Olu turulan anahtarlar 1024 bitlik RSA[40] anahtarlar r.

- A sunucusu yaratt herkese aç k anahtardan sunucu bilgilerini de içeren imzalanm sertifikas olan x .509 sertifikas olu turarak bunu ihraç eder ve B sunucusuna iletir.

- B sunucusu A dan alm oldu u setifikay “güvenilir sertifikalar” listesine ekleyerek saklar.

- Ayn ekilde A sunucusu da B nin yarat p, imzalam ve ihraç etmi oldu u sertifikas kendi “güvenilir sertifikalar” listesine ekler.

- Bu andan itibaren A ve B sunucular SSL üzerinden haberle ebilir durumdad rlar. Bu ad mlardan herhangi birinin eksik olmas sunucular aras ndaki ileti imim ba layamamas na neden olur.

RMI, ula m katman protokolü için “tcp” kullan r. JAVA dili ula m katman için yarat lan soket nesnesinin de tirilmesine izin vermektedir. Yap lan de ikliklerle ula m katman için SSL üzerinden haberle meyi sa layacak özel bir socket yarat lm ve RMI’ n haberle meyi bu yeni soket üzerinden yapmas için gerekli kodlar yaz lm r. stemci ve sunucu için yaz lan yeni soket s flar ve kodlar

da verilmi tir. Yarat lan yeni soketler bu s flar kullan larak olu turulur.

RMISSLClientSocketFactory.java package server; import java.io.IOException; import java.io.Serializable; import java.net.Socket; import java.rmi.server.RMIClientSocketFactory; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory;

public class RMISSLClientSocketFactory implements RMIClientSocketFactory, Serializable {

public Socket createSocket(String host, int port) throws IOException {

SSLSocketFactory factory =

(SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) factory.createSocket(host, port);

return socket; }

}

stemci taraf nda olu turulacak olan yeni soket, JAVA n n haz r sa lam oldu u “SSLSocketFactory” s ndan olan yeni bir soket nesnesidir; bunun d nda ek bir i gerekmez. Ancak sunucu için olu turulacak soket nesnesi için daha karma k kod gerekmektedir, çünkü sunucu öncelikle istekte bulunan istemcinin güvenilen bir sertifikaya sahip olup olmad kontrol etmelidir.

RMISSLServerSocketFactory.java package server; import java.io.*; import java.net.ServerSocket; import java.rmi.server.RMIServerSocketFactory; import java.security.KeyStore; import javax.net.ssl.*; import utility.*;

public class RMISSLServerSocketFactory implements RMIServerSocketFactory, Serializable {

public ServerSocket createServerSocket(int port) throws IOException { SSLServerSocketFactory ssf = null; try { SSLContext ctx; KeyManagerFactory kmf; KeyStore ks; char[] passphrase = Globals.currentServerParameters.getParameterValue("SecurityDbPasswor d").toCharArray(); ctx = SSLContext.getInstance("TLS"); kmf = KeyManagerFactory.getInstance("SunX509"); ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream(Globals.securityDBFileName), passphrase); kmf.init(ks, passphrase);

ctx.init(kmf.getKeyManagers(), null, null); ssf = ctx.getServerSocketFactory();

} catch (Exception e) { Utils.logFullTrace(e);

}

return ssf.createServerSocket(port); }

}

RMI’ n SSL protokolü üzerinden çal ma ekli ekil 7.1.1.1.1 de gösterilmi tir.