# Applets signieren



## itebob (24. Jul 2004)

Im Beitrag Sicherheitrichtlinien für Applets


			
				Donut hat gesagt.:
			
		

> Wenn du dein Applet zertifizeren lassen willst, musst du das glaun ich bei Microsoft irgendwie anmelden, was aber nur im IE zusätzliche Rechte bedeuten würde. *Von daher ist dies nicht sinvoll*.


 Das stimmt so nicht, IMHO 8)  :

ich habe  entsprechend den Anleitungen 'Signierte Applets' (im Kapitel 47. Sicherheit und Kryptographie) aus 'Go To Java 2' http://javabuch.de) und _'How to Sign Applets Using RSA-Signed Certificates'_ ( http://java.sun.com/j2se/1.4.2/docs/guide/plugin/developer_guide/rsa_signing.html ) ein signiertes Applet in der Datei _strapp.jar_ und eine Policy-Datei  erstellt und erfolgreich getestet (*mit Internet Explorer und Firefox 0.8*). Entsprechend den in der Policy gesetzten Rechten 
	
	
	
	





```
keystore "file:/c:/Gw_win98/Profiles/www/.keystore;"

grant SignedBy "[b]DOMArtikel[/b]" {
  permission java.io.FilePermission "c:\\worker\\*", "read,write";

  permission java.util.PropertyPermission "user.name", "read";
  permission java.util.PropertyPermission "user.home", "read";
  permission java.util.PropertyPermission "user.dir", "read";
};
```
hat meine _TrustedApplet.java_-Klasse im gleichen Verzeichnis eine Datei _TrustedApplet.log_ mit oben aufgelisteten Daten erstellt. Diese in der jar-datei verpackte funktionsfähige Klasse  TrustedApplet.class habe ich immer noch. Aber meine wiederholte Versuche eine zweite 1:1 identische Klasse zu erstellen scheitern. Ich bilde mir ein, dass ich alles wie beim ersten erflgreichen Versuch mache, aber im Endergebnis komme ich immer wieder zu 

```
java.security.AccessControlException: access denied (java.io.FilePermission\TrustedApplet.log write).
```
Meine neue _signedApplet.jar_-Datei ist erfolgreich signiert. Hier das Ergebnis:
	
	
	
	





```
C:\worker>jarsigner -verify -verbose -certs signedApplet.jar

         147 Sat Jul 24 11:12:34 CEST 2004 META-INF/MANIFEST.MF
         200 Sat Jul 24 11:12:34 CEST 2004 META-INF/DOMARTIK.SF
        1975 Sat Jul 24 11:12:34 CEST 2004 META-INF/DOMARTIK.DSA
           0 Sat Jul 24 10:58:36 CEST 2004 META-INF/
           0 Fri Mar 12 14:37:54 CET 2004 jar/
smk     1826 Sat Jul 24 10:56:36 CEST 2004 jar/TrustedApplet.class

      X.509, CN=Gustav WAll, OU=http://selfcms.de, O=http://selfcms.de, L=Kamenz
, ST=Sachsen, C=DE ([b]domartikel[/b])
      X.509, CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte Certification,
ST=FOR TESTING PURPOSES ONLY, C=ZA


  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.
```
Also 'jarsigner' bestätigt, dass meine signedApplet.jar signiert ist und trotzdem bekomme ich ' access denied'. Was ich securitymäßig in meiner Java-Umgebung geändert habe ist m.E. nur, das ich in die Schlüsseldatenbank _'.keystore' _noch ein Zertifikat  nach gleichem Muster, wie auch das erste, funktionierendes, importiert. Aber das dürfte doch nicht auf die Funktionsfähigkeit eines bereits funktionierenden Zertifikats auswirken? 

Das steht in der   _TrustedApplet.class_ (wie gesagt, übernommen aus 'Go To Java 2' und hat beim ersten Versuch funktioniert )


```
/* TrustedApplet.java */
 
 import java.awt.*;
 import java.applet.*;
 import java.util.*;
 import java.io.*;
 
 public class TrustedApplet  extends Applet
 {
   static final String ALLOWED_DIR = "c:\\worker\\";
   static final String FNAME       = "TrustedApplet.log";
   static final String LOGMSG      = "Erzeugt von Applet: ";
   String msg;
 
   public void init()  {
     msg = "Uninitialisiert";
     FileWriter out = null;
     try {
       //Ausgabedatei erzeugen
       out = new FileWriter(ALLOWED_DIR + FNAME);
       //Logmessage schreiben
       out.write(LOGMSG);
       //Zeitstempel schreiben
       GregorianCalendar cal = new GregorianCalendar();
       out.write(cal.get(Calendar.DATE) + ".");
       out.write((cal.get(Calendar.MONTH) + 1) + ".");
       out.write(cal.get(Calendar.YEAR) + " ");
       out.write(cal.get(Calendar.HOUR_OF_DAY) + ":");
       out.write(cal.get(Calendar.MINUTE) + ":");
       out.write(cal.get(Calendar.SECOND) + "");
       out.write(System.getProperty("line.separator"));
       //System-Properties lesen und in Datei schreiben
       out.write(getProp("user.name"));
       out.write(getProp("user.home"));
       out.write(getProp("user.dir"));
       //Datei schließen
       msg = "Hurra!!!\n\nAlle Sicherheitshuerden ueberwunden!";
     } catch (Exception e) {
       msg = e.toString();
     } finally {
       if (out != null) {
         try {
           out.close();
         } catch (IOException e) {
           //silently ignore
         }
       }
     }
   }
 
   public void paint(Graphics g)
   {
     g.drawString(msg, 20, 20);
   }
 
   private String getProp(String prop)
   {
     return prop + "=" + 
            System.getProperty(prop) + 
            System.getProperty("line.separator");
   }
}
```


```
<html> 
<title>TrustedApplet</title> 
<body> 
<applet code="TrustedApplet.class" archive="signedApplet.jar" width="200" height="200"> 
<param name="String" value="Ausgabe im Applet-Fenster"> </applet> 
</body>
</html>
```
Diese Applet-Lösung ist mein Versuch alternativ zu einem Schreibzugriff  auf VBScript-Basis eine Java-basierte-Lösung umzusetzen. Weil ich eigentlich hätte am liebsten möglichst wenig mit MS-Produkten zu tun.  

*Kann jemand in meinen Quellen Fehler auf Anhieb erkennen?*
 Über (ein Link zu) Kurzbeschreibung *'Wie man richtig Applets signiert'*, die  von oben genannten Quellen abweicht, würde ich mich freuen. 

Meine Arbeitsumgebung
_Windows 98 SE
j2sdk1.4.2 04_


----------



## L-ectron-X (24. Jul 2004)

Ich habe mich bisher mit dem Signieren von Applets nicht befasst, weiß aber von einem Tool, welches nicht nur Klassen zu jar-Archiven zusammen fassen, sondern auch signieren kann. Vielleicht versuchst Du mal mit Jarkive Dein Glück.


----------

