Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Applet kodlarınız kendi makinenizde sorunsuzca çalışıyor ancak webe attığınızda çalışmıyorsa sebebi appletlerin güvenlik sınırlamalarıdır. Bunu aşmak için appleti imzalamalısınız ve kullanıcılarda appletin bilgisayarlarında yapabileceklerini kabul ettiklerinde ancak applet çalışacaktır. Buna Yerel Dosya Sistemine Erişmeye Yetkili Güvenilir Applet yazmakta denebilir.

Kullanıcıların yerel dosya sistemine erişim hakları ile  güvenilir uygulamalar oluşturma, bu gün bile hayati bir konu olmaya devam etmektedir.

Java Applet yazanların  karşılacağı en önemli problemlerden birisi makinelerinde yazdıkları kodun web sayfalarında çalışmaması olacaktır.

Örneğin aşağıdaki gibi bir applet uygulaması programcının makinesinde şu şekilde çalışırken:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Aynı uygulama web üzerinde şöyle bir sonuç verecektir:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Sorunun detaylarına baktığınızda aşağıdaki gibi bir ekranla karşılaşacaksınız:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Detaylara indiğinizde de karşılaştığınız kod satırı aşağıdaki gibi olacaktır.

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Bu kodlar:
 

java.lang.reflect.InvocationTargetException
    at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116)
    at sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3415)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:2967)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1444)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
    at java.lang.System.getProperty(System.java:650)
    at javax.swing.filechooser.FileSystemView.getHomeDirectory(FileSystemView.java:393)
    at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(MetalFileChooserUI.java:253)
    at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:136)
    at javax.swing.plaf.metal.MetalFileChooserUI.installUI(MetalFileChooserUI.java:126)
    at javax.swing.JComponent.setUI(JComponent.java:662)
    at javax.swing.JFileChooser.updateUI(JFileChooser.java:1763)
    at javax.swing.JFileChooser.setup(JFileChooser.java:360)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:333)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:286)
    at test.<init>(test.java:29)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at sun.plugin2.applet.Plugin2Manager$12.run(Plugin2Manager.java:2955)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception: java.lang.reflect.InvocationTargetException

 

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Kodlarda kısaca anlatılmak istenen Applet içerisindeki bir bölümün kullanıcı bilgisayarı üzerinde işlem yapmak istemesi ve bunun için kullanıcıdan izin alınmadığı için kodun çalıştırılamayacağı.
 
Problem bazı kodların  sadece kullanıcı (Client) tarafında çalışması gerektiğidir. Örnegin bir resim dosyasının kullanıcı bilgisayarı üzerinde küçültülmesi gibi.  Applet Java programlarının, server bilgisayarlarındaki java kodlarının kullanıcı bilgisayarına otomatik olarak (browser aracılığı ile) indirilen ve çalıştırılan versiyonudur. Yani kullanıcı browseri aracılığı ile sizin yazdığınız programı kullanır.

Bu noktada appletin güvenliği devreye girer çünkü kullanıcı kodun içeriğini bilemiyeceği için güvenlik riski olan bir durum ortaya çıkar fakat Java nın yazarları buna çare olarak security manager adlı sistemi geliştirmişlerdir,böylece koda bazı sınırlamalar koyarak kullanıcıya zarar vermesi önlenir.
Appletlerdeki bu sınırlamayı aşmanın tek yolu signed applet yaratmaktır.Signed applet yapmak için şu adımları izleyin .
 
Genel olarak programcılar Güvenilir Applet Teknolojisine (Trusted Applet veya Signed Applet) yabancıdırlar. Bu durum kullanıcı dosyalarında arama, değiştirme gibi işlemleri imkansız hale getirir.
 
Aşağıdaki işlemlerde nasıl Güvenilir Applet oluşturulacağı ile ilgili bilgiler bulunmakta. Bunun için JDK 1.3 veya yukarısı gerektiğini unutmayın.

Güvenilir Applet oluşturmak için JDK dışında bize gerekenler javac, keytool ve jarsigner adlı dosyalar olacaktır.

keytool kişisel ve özel anahtar çiftini ( private and public keys ) oluşturmak ve kontrol etmek için gereklidir. Ayrıca Anahtarların saklandığı özel dosya .keystore dosyasınıda keytool oluşturmaktadır.

jarsigner ise apllet classımıza sahip jar dosyamızı Dijital işağretleme Kimliğimizle işağretmek için kullanacağımız araçtır.

 

Şimdi yukarda çalışmayan appletimizi çalıştırmak için yapnanuz gerekenler:


Öncelikle yazdığınız kodu aşağıdaki gibi derlemelisiniz: yani .java uzantılı kodlarınız byte koda .class uzantısına çeviriyoruz

javac test.java

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

şimdi elde ettiğimiz .class uzantılı dosyamızdan .jar uzantılı java dosyamızı oluşturuyoruz:

jar cvf test.jar test.class

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Şimdi appletimizi çalıştıracak html kodumuzu düzenliyoruz:

  Burda eklediğimiz kısım applet tagı içerisindeki archive="test.jar" şeklindeki kısımdır.

<HTML>
<HEAD>
   <TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>

<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>

<P>
<APPLET codebase="classes" code="test.class" archive="test.jar" width=350 height=200></APPLET>
</P>

<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>

 

Applet bu halde çalıştığında makalenin başındaki giriş çıkış yetkisizliği mesajı vererek çalışmayacaktır. Ancak unutulmaması gereken bu durumun her applet için geçerli olmadığı sadece kullanıcı bilgisayarında işlem yapacak appletler için durumun böyle olduğudur.

Şimdi appletimiz için özel ve genel anahtarlar oluşturup bu anahtarlarla appleti imzalamak olacak:

Aşağıdaki komutla appletimiz için genel ve özel ( privative ve public ) anahtarı oluşturuyoruz.

keytool -genkey -alias test -validity 365

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Şimdide oluşturulan bu anahtarla appletimizi işağretleyelim ( Applet Sign ):

jarsigner test.jar test

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Şimdi hazırız, html ve class ve jar dosyalarımızı webe atıp oradan testimizi yapıyoruz:

Ekrana aşapğıdaki gibi bir onay ekranı geliyor, bu ekran kullanıcıdan "bak bu applet senin bilgisayarına format bile atabilir, buna izin veriyor ve bu appleti yazan Muhammed Zeydaga güveniyor musun? " şeklinde bir onayı bir kereliğine isteyecektir.

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Kullanıcı şartları kabul ederse:

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

Artık appletiniz herşeyi yapmaya yetkili olacaktır.

Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak

 

Kaynak:

Yorumunuzu Ekleyin
Kullanıcının Bilgisayarında İşlem Yapmaya Yetkili Güvenilir (Signed) Applet Yazmak Yorumları +1 Yorum
  • Osman
    1
    Osman
    Çok güzel anlatmışsınız, gerçekten faydalı oldu Teşekkürler.
    18 Mart 2011 17:42:21, Cuma

Yükleniyor...