Applet Nedir?
Appletlerin temel özellikleri ve kısıtlamalarının aşılması
Applet Nedir ?
Applet Web Sayfaları üzerinde yayınlabilen class dosyalarıdır. Bir applet mutlaka Apllet sınıfının alt sınıfı olmalıdır. Applet sınıfını yaratabimek için “java.applet” paketi ve “java.awt” paketi ithal edilmelidir. Appletler üzerinde tüm awt bileşenleri yerleşebilir ve her türlü çizim ve boyama işlemi yapılabilir. Çizim ve boyama işlemelerini gerçekleştirmek için “java.awt.Graphics” sınıfından yararlanılır. Bir java classı applet olarak çalıştırılmak isteniyorsa mutlaka “java.applet.Applet” sınıfının alt sınıfı olma zorunluluğu vardır ve “java .applet.Applet” sınıfı “java.awt.Panel” sınıfının alt sınıfı olduğu için, bir Applet aynı zamanda panel gibi de davranabilir. Bu nedenle applet dosyaları bir masaüstü uygulaması gibi çalışırken bir yandan da bir web uygulaması olarak da çalışabilir.
Applet ve Awt
Bir appletin yaşam döngüsü için gerekli olan methodlardan biri “paint” ve “update” methodudur, bu methodlar çizim işlemleri için “Graphics” sınıfından bir parametre alırlar bu nedenle iki sınıf birlikte kullanılmalıdır.S
Swing ve Japplet
Applet sınıfı temel olarak awt araç takımı için geliştirilmiş bir sınıftır. Bu nedenle gelişmiş bileşen modeline sahip olan Swing bileşenlerini kapsayamaz. Bu nedenle swing bileşenlerini kapsayacak applet sınıfından daha geniş özllikleri <bulunan Japlet sınıfı geliştirilmiştir. Bu konu içerik kapsamı dışında bulunduğu için değinilmemektedir.
Applet sınıfı ve yaşam döngüsü
Appletler yaşamlarında belirli evreler geçirirler. Bunlar ;
a) init
b) start
c) stop
d) destroy
methodlarıdır…
init : İnit metodu applet sınıfı yüklenmeden önce çalışan özel bir methodtur. Applet sınıfından kalıtılarak gelmiştir ve üzerine yazılarak ( Override ) işlem yapılır.
Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.
Stop : Eğer çalışan bir applet dosyasının bulunuduğu sayfadan başka bir URL’ye geçiş yaparsanız veya sayfanızı tamamen kapatırsanız. Applet sınıfında ilk olarak “stop” methodu çalışır. Stop methodu da “Applet” sınıfından kalıtılarak gelmiştir ve üzerine yazılarak kullanılır.
Destroy : Applet bulunan sayfalarınızdan birini kapattığınızda veya başka bir URL’ye geçtiğinizde, ilk olarak stop methodu ardından son olarak çöp toplayıcı method çalışır. Bu methodu tetikleyen method “destroy” methodudur. Destroy methodu Applet sınıfından kalıtılarak gelir ve genellikle üzerine yazılmaz.
Bir applet sınıfının hayat döngüsü aşağıdaki gibi olur, stop edilmiş bir applet dosyası init edilmeden tekrar start edilebilir.
CREATOR -> INIT -> START <--> STOP-> DESTROY
Çizim methodları : Paint – Update – Repaint
Paint : bu method parametre olarak Graphics sınfından bir nesne alır, JVM tarafından gönderilen cizim nesnesi kullanılarak Appletler üzerine çizim işlemleri yapılabilir.
Update : Bu method da aynı paint methodu gibi çalışır, yalnız paint methodundan farkı bu method çağrıldığı zaman çalışır ve yaptığı çizimleri önceki çizimlerin üzerine geçirir. Oysa paint methodu çağrılmasa da varsayılan olarak genellikle start methodundan sonra çalışır, ayrıca paint methodu çizim yaparken öncek çizimleri siler.
Repaint : Paint methodunu bir daha çağrılmasını sağlar. Kısacası sayfanın yenilenmesi sürecini işletir diyebiliriz.
Basit bir applet sınıfı
import java.awt.*;
import java.applet.*;
public class app1 extends Applet {
private String str = null;
public void init() {
str = "serdar"; // ilk olarak bu metot çalışır
}
public void start() {
str = "türkel"; // ikinci olarak bu metot çalışır
}
public void stop() {
this.destroy(); // başka bir URL’ye geçildiği zaman veya pencere kapatıldığı
// zaman bu metot çalışır
}
public void paint(Graphics g) {
g.drawString(str, 10, 10); // çizim araçlarının kullanıldığı method.
}
}
Şekil 1.1
Yukarıdaki kod derlendikten sonra artık oluşan class dosyamızı HTML dosyası içerisine gömebiliriz.
<html>
<head>
<title>example for applet</title>
</head>
<body>
<applet code="app1.class" width="300" height="300"></applet>
</body>
</html>
Yukarıdaki kod ile basit bir applet sınıfını sayfanıza ekleyebilirsiniz.
Applet Etiketi:
Code= yüklenecek applet classının adı belirtilir
Codebase=yüklenecek applet dosyası html dosyasından farklı bir adreste ise belirtilecek açık yol bu bölüme yazılmalıdır.
Width= applet sınıfının html sayfasının üzerinde ne kadar genişlik kaplayacağını belirler.
Height= Applet sınıfının html sayfasının üzerinde ne kadar yükseklik kaplayacağını belirler.
Archive= Bu özellik sayesinde jar dosyası haline getirilmiş applet dosyalarını daha verimli bir şekilde yükleyebiliriz. Jar dosyalarını belirtmek için kullanılır.
6. HTML üzerinden applet dosyalarına veri gönderilmesi :
<html>
<head>
<title>example for applet</title>
</head>
<body>
<applet code="app1.class" width="300" height="300">
<param name="ad" value="serdar türkel">
</applet>
</body>
</html>
Gönderilecek veriler param etiketi ile applet etiketinin içine yerleştirilir bu sayede applet init veya start olma sırasında bu param etiketindeki value değerini alabilir. Aşağıdaki kod init sırasında param etiketindeki verinin nasıl alındığını göstermektedir. Aşağıdaki kodu şekil 1.1’deki kod bloğundaki init methodunun içerisine yazınız.
….
str= "serdar";
str=this.getParameter("ad");
…
this.getParameter(“ad”) kodu sayesinde ad isimli param etiketinin verisini alabilirsiniz.
JavaScript ile applet classlarına müdahale etme
Yazmış olduğumuz java kodunun içerisine aşağıdaki methodu ekleyin.
public void strYaz(String str){
this.str=str;
repaint();
}
Yukarıdaki kodu ekledikten sonra derlemeyi unutmayın!
Yazmış olduğunuz HTML kodunun “head” ve “body” etiketleri arasına aşağıdaki JavaScript kodunu yerleştiriniz.
<script language="javascript1.2">
function strGonder(){
var obj=document.getElementById;
obj("app").strYaz(obj("str").value);
}
</script>
Kod üzerine dikkat edilirse, applet classına ait methodlar javascript üzerinde yaratılan bir nesne aracılığı ile rahatlıkla çağrılabilir. Sadece applet nesnemize ait bir id ismine ihtiyacımız vardır, şekil 2.4’de bu id numarası verilmektedir. JavaScript kodunu yerleştirdikten sonra aşağıdaki kodları da aynı HTML dosyanızın “</body>” etiketinin hemen üstüne yerleştirin.
<input name= "str" type= "text" id= "str">
<input name= "gonder" type="button" id= "gonder" value= "gönder" onClick= "strGonder()">
Son olarak <applet> etiketinizi aşağıdaki gibi düzenleyin, appletimize id ismi veriyoruz
<applet code="app1.class" width="300" height="300" id="app">
Varsayılan Applet Sınırlılıkları
Appletler sonuç olarak bir programlama dilinin ürünüdür, bu nedenle bir programlama dilinin tüm nimetlerinden yararlanması mümkündür. Ancak internet ortamında bu mümkün değildir. Eğer internet ortamında da appletler bir java programı kadar özgür olabilseydi, kullanıcı güvenliğinden bahsetmemiz mümkün olmazdı. Bu nedenle bütün appletler çalışma sırasında varsayılan olarak bazı kısıtlamalara maruz kalmaktadır.( Bu kısıtlamaların nasıl aşılacağı dijital imzalar bölümünde anlatılacaktır ).
Bu kısıtlamalar :
Bir applet;
a) yayınlandığı sunucu dışında hiçbir sunucu ile iletişime geçemez
b)Kullanıcının sisteminden herhangi bir dosya silemez, değiştiremez veya sisteme bir dosya ekleyemez veya bir dosya alamaz
c)Kullanıcının sisteminde bulunan hiçbir programı çalıştıramaz, çalıştırmak için başvuramaz.
Yukarıda belirtilen kısıtlamalar imzalı olmayan veya imzası kabul edilmeyen applet uygulamaları için geçerlidir.
Applet sınırlılıkarını aşmak
Bir önceki bahsedilen kısıtlamaları aşmak için yapmış olduğumuz applet dosyasını arşiv haline getirdikten sonra bir sertifika ile imzalamalıyız. Sertifika ile imzalanmış olan bir applet çalışma sırasında sertifika bilgisi verir. Eğer sertifika bilgisi doğrulanıyorsa veya kök sertifikalar içerisinde yer alıyorsa kullanıcı bir mesaj almaz ve tüm kısıtlamalar kaldırılarak applet dosyası tüm erişimlere açık olarak kullanıcının sisteminde çalışır. Ancak imzalanmış sertifika kullanıcının siteminde bulunmuyorsa veya kök sertifikalar içerisinde yoksa, kullanıcı bir bilgilendirme mesajı alır, bu mesaj kullanıcı tarafından kabul edilirse applet yine tüm erişimlere kavuşur. Eğer kullanıcı sertifika belgesini kabul etmezse applet başlangıçtaki kısıtlamaları ile çalışmaya devam eder. Applet sınırlılıkarını aşmak için sertifika edinmeniz gerekir. Sertifika edinmek için java araçlarından yararlanabilirsiniz.
Dijital imza nedir
Yazılı dokümanlarda kullandığınız imzalar gibi, dijital imzalar da günümüzde e-posta veya elektronik verilerin yazarlarını/sahiplerini tanılamada kullanılmaktadır. Dijital imzalar, Dijital Sertifikalar kullanılarak yaratılır ve doğrulanırlar. Bir bilgiyi imzalamak, güvenli bir alışverişi gerçekleştirmek için kendi özel Dijital Sertifikanıza ihtiyaç vardır. Günümüzde uluslararası yasama organları dijital imzaları ıslak imzalar gibi yasal olarak bağlayıcı ve uluslararası çapta kabul edilebilir kılmak için yasalar çıkarmışlardır. Dijital imzaların sağladığı başlıca önemli fonksiyonlar şöyledir: tanılama, gizlilik, veri bütünlüğü ve inkar-edilememe.
Gerçek hayatta kişiyi tanımlayan özellikler sanal ortam da dijital imza olarak adlandırılır. Parmak izi gibi. Dijital imza kullanılarak yapılan iletişimde az önce de bahsedildiği inkar edebilme durumu ortadan kalkar. İletişimin gerçekten de doğru kişi tarafından yapılıp yapılmadığını test eder ve doğrular. Dijital imzalar bu doğrulama sürecini gerçekleştirmek için iki temel özellikden yararlanır;
1. özel anahtar
2. genel anahtar
Anahtar nedir?
Anahtar, şifrelenen metin için algoritmanın bir parçası olan basit rakamsal bir değerdir. Bir dosyayı şifrelemede ve deşifre etmede kullanılan karakterlerin bir sekansıdır. Simetrik anahtar algoritması için, şifreleme ve deşifreleme için aynı anahtar kullanılır. Anonim anahtar algoritmaları için ise şifreleme ve deşifre işlemleri birbirini tamamlayarak kullanılan "anonim ve özel" bir anahtar çifti ile yapılır.
Özel anahtar : Bu anahtar kişiye özel anahtardır ve sadece imza sahibinde bulunur ve iyi bir şekilde saklanmalıdır. Bu anahtar sayesinde size gelen mesajları doğrular ve okuyabilirsiniz. Özel anahtarlar kendilerine gelen ve genel anahtar ile imzalanıp şifrelenmiş veriyi çözen algoritmaya sahitir. Özel anahtar sadece kendisin ait olan genel anahtar tarafından imzalanmış verileri çözer, ayrıca genel anahtar tarafından imzalanmış olan bir veri sadece kendisine ait olan özel anahtar tarafından çözülebilir. Bu sayede size gelmesi gereken veriler başkasının eline geçse dahi, ellerinde sizin özel anahtarınız bulunmadığı takdirde hiçbir verinizi okuyamayacaklardır. Özel anahtarın güvenliği bu nedenle çok önemlidir.
Genel anahtar : Genel anahtar kişinin iletişim kurmak istediği kişilerde bulunan anahtardır ve sadece iletişim kurulacak kişilerde bulunabilir. Bu anahtarın gizlliği özel anahtar kadar olmasa da önem arz eder. Özellikle tek taraflı imzalanmış bir iletişim kullanıyorsanız genel anahtarın gizliliği de önemlidir. Genel anahtar özel anahtar ile şifrelenmiş veriyi çözecek algoritmaya sahiptir. Özel anahtar kendi şifrelediği veriyi kendisi çözemez, genel anahtar da aynı şekilde kendi şifrelediği veriyi kendisi çözemez, buna anahtar-kilit ilişkisi denilmektedir. Özel anahtar ile imzalanmış bir mesaj sadece o anahtarın kilidi tarafından yani genel anahtar tarafından çözülebilir. Bu da sizin isteğiniz dışında birisine gidecek olan mesajın o kişi tarafından okunamayacağıdır. Tabi sizin genel anahtarınıza sahip değilse. Çoğu durumda kişiler kendilerine ait genel anahtarları internette yayınlarlar ve herkes tarafından erişilmesini sağlarlar. Çünkü genel anahtarlarını sadece mesaj almak için kullanılırlar, mesaj göndermek için ise, gönderecekleri kişinin genel anahtarını kullanılırlar.
Özel anahtar ve genel anahtar birlikte oluşturulurlar. Oluşturulan anahtar çifti ilgili bir veri için oluşturulur. Ve veri imzalandığı zaman sadece o veriye özel bir parmak izi oluşur. Bu parmak izi verinin doğrulanması sürecinde kullanılacaktır. Eğer veri imzalandıktan sonra veri üzerinde bir bit dahi değiştirilirse doğrulama süreci bozulacağından veri çalıştırılmayacaktır.
Bahsedilen bu anahtar çiftleri bir sertifikayı temsil ederler.
Dijita imza nasıl çalışır?
Dijital İmza'yı yaratan dijital sertifikalardır. Pekiyi, dijital sertifikalar nasıl çalışır? Dijital Sertifikalar kişi yada kurumları anonim anahtara bağlarlar. Bu işlemin ise Sertifika Mercii denilen bir kurum tarafından yapılması gerekmektedir. Ayrıca hizmet veren Tarafsız ve Güvenilir Sertifika Mercii'leri de bulunmaktadır.
Dijital Sertifikalar, anonim ve özel anahtar çiftinin oluşturduğu Anonim Anahtar Kriptografisi'ne dayanır. Özel anahtar sadece sahibi tarafından bilinir ve dijital imzanın yaratılmasında kullanılır. Bu anahtarın -aynı kredi kartı örneğinde olduğu gibi- sahibi tarafından mutlaka gizli tutulması gerekmektedir. Anonim Anahtar ise herkes tarafından bilinir ve dijital imzanın geçerliliğini kontrol etmek için kullanılır. Bu anahtarlar numaralardan oluşmakta olup bütün bu işlemler bilgisayarınız tarafından otomatik olarak yapılırlar.
1. ilk olarak bir CA üzerinden sertifika talebinde bulunulur
2. sertifika talebi için gerekli şartlar sağlandıktan sonra sertifika alınır
3. sertifika üzerinde bulunan özel anahtar yayın yapılacak pc üzerinde bulunur
4. genel anahtar ise CA tarafından doğurlama süreci için tutulur. CA talepte bulunanı doğrular.
5. yayın noktasından doğrulama sürecini tamamlayan bilgi alındıktan sonra yayımlayıcı bulunduğu noktada bir sertifika oluşturur ve istekleri bu sertifika kullanarak sağlar.
6. yayın klasörüne bir istekde bulunulursa isteğe sertifikalı bir onay gönderilerek cevap verilir.
7. istemciye gelen veriler doğrulama sürecinden geçemezse imstemci tarafında işlmeler gerçekleştirilmez.
Anahtar deposu
Java ile dijital imza geliştirmeden öce applet dosyamızı jar aracı ile arşiv dosyasına çevirmeliyiz. ( Jar dosyasına çevirmek konu içeriğinde yer almadığı için detaylarına girilmeyecektir).
Jar dosyasını oluşturmadan önce manifest.mf dosyamızı oluşturuyoruz.
Manifest-Version: 1.0
Created-By: 1.5.0_04 (Sun Microsystems Inc.)
Main-Class: app1
Aşağıdaki kodu manifest.mf dosyasının ve app1.class dosyasının bulunduğu yerde çalıştırın
Jar –cvfm app1.jar manifest.mf *.class
Javada genel ve özel anahtarların saklandığı bir anahtar deposu yaratılabilir bunun için “keytool” aracından yararlanıyoruz. Bir anahtar deposu içerisine bir anahtar yerleştirmek için iki güvenlik şifresine ihtiyacınız olacaktır. Birincisi anahtar deposuna giriş şifresi, ikincisi kullanacağınız anahtar çiftine ait şifredir. İki şifreyi de anahtar çifti oluşturma sürecinde veriyoruz. Yeni bir anahtar deposu oluşturmak için keytool aracına “-genkey” parametresini ekleriz, anahtar deposunun kaydedileceği yeri ve adını belirtmek için ise, “-keystore <depo yolu / depo adı>” parametresini ekleriz. Anahtar deposuna şifre koymak için “-storepass” parametresinden yararlanırız. Anahtar çiftleri için şifre vermek için “-keypass” parametresini ekleriz. Anahtar çiftleri anahtar deposunda bir isim adı altıda tutulurlar ( bu isimlerin sertifikayı temsil ettiğinden bahsetmiştim ) bu isimi tanımlamak için “-alias <isim>” parametresini ekleriz. Aşağıdaki örnek bir sertifika deposu oluşturur.
Keytool –genkey –keystore C:depo.jdb –storepass 123456 –keypass 654321 –alias sertifika1
Bu işlemlerden sonra aşağıdaki gibi gelen pencereyi düzenli bir şekilde doldurun.
What is your first and last name?
[Unknown]: Serdar TÜRKEL
What is the name of your organizational unit?
[Unknown]: Teach
What is the name of your organization?
[Unknown]: edutime – academy of information technologies
What is the name of your City or Locality?
[Unknown]: marmara
What is the name of your State or Province?
[Unknown]: istanbul
What is the two-letter country code for this unit?
[Unknown]: TR
Is CN=Serdar TÜRKEL, OU=Teach, O= edutime – academy of information technologies, L=marmara, ST=istanbul, C=TR correct? [no]: yes
Örnekteki gibi bilgileri doldurduktan sonra yes yazıp enter tuşuna basın. Artık sizinde bir anahtar deponuz ve anahtar çiftiniz var. Şimdi bununlar verilerinizi imzalayabilirsiniz. Yarattığımız bu sertifika ile ilk olarak anahtar depomuzdan çıkartıp app1.jar dosyamızı imzalayacağız.
Sertifika ile imzlama yapmak için jarsigner aracından yararlanağız. bu araç ile keytool aracında olduğu gibi anahtar deposunun yerini, anahtar deposunun şifresini, anahtar çiftinin adını ve şifresini girdikten sonra ekstra olarak aşağıdaki özellikeride girmelisiniz.
-signedjar <imzalandıktan sonraki adı> <imzalanacak jar> <alias>
Örnek bir imzalama :
-jarsigner –keystore C:depo.jdb –storepass 123456 –keypass 654321 –signedjar sapp1.jar app1.jar sertifika1
Artık imzalanmış yeni bir jar dosyasına sahibiz. Bu dosyamızın adı sapp1.jar. bu dosyayı html sayfasında yayınladığımız zaman karşımaza yapmış olduğumuz sertifika bilgisi gelecektir. Eğer gelen isteğe evet derseniz tüm applet sınırlılıklarından kurtulmuş olacaksınız. Red ederseniz yine aynı kısıtlamalarla çalışmaya devam edecektir. Sertifikalı applet oluşturma basamak şimdilik bu kadar dah sonraki dökümanlarımda sertifikasyon işlemlerine daha detaylı olarak değinmeyi düşünüyorum.
SERDAR TÜRKEL
www.programlama.com/sys/c2html/view.php