# Herausfinden, ob Zertifikat zugestimmt wurde (Signierung)



## Marcel_Handball (28. Sep 2007)

Hallo zusammen, 

ich habe bisher überwiegend Applikationen erstellt. Nun benötige ich allerdings ein Applet und habe versucht dieses zu signieren.
Ich kriege es einfach nicht hin. Ich habe eine vorliegende jar-Datei (Applet.jar). Nun führe ich folgendes aus:


```
C:\Programme\Java\jdk1.6.0\bin\keytool -genkey -alias Mustermann -dname "cn=MainProgram, c=de"
C:\Programme\Java\jdk1.6.0\bin\keytool -selfcert -validity 3650 -alias Signer -dname "cn=MainProgram, c=de"
C:\Programme\Java\jdk1.6.0\bin\jarsigner Applet.jar Signer 
C:\Programme\Java\jdk1.6.0\bin\jarsigner -verify -verbose -certs Applet.jar 
@ECHO OFF
PAUSE
```

Was mache ich falsch? Was muss ich anders machen?
Ich habe bereits die FAQ zu dem Thema gelesen, haben es aber trotzdem nicht hinbekommen.

(Edit: Wenn es signiert ist, wie erkenne ich dies? Wird die html-datei mit in das jar archive gelegt?)


----------



## Marcel_Handball (28. Sep 2007)

Habe es hinbekommen.

Nun aber eine andere Fragen zum Signieren. Lässt sich beim Start des Applets feststellen,
ob der User dem Zertifikat zugestimmt hat, ich also die Rechte zum Ausführenverschiedener
Operationen habe?


----------



## L-ectron-X (28. Sep 2007)

In dem Du die AccessControlException abfängst. Die wird nämlich geworfen, wenn der Benutzer das Zertifikat ablehnt.


----------



## Marcel_Handball (28. Sep 2007)

Wie mache ich dies, denn ich öffne das Zertifikat ja nicht selbst im Programm (Applet).
Verwende ich hierzu auch eine try/catch Konstruktion? 
Um zwei, drei Zeilen Code wäre ich sehr dankbar. :wink:


----------



## L-ectron-X (28. Sep 2007)

:arrow: Hier ein lauffähiges Applet zu Demonstrationszwecken. Manchmal wird die Freenet-Seite nicht gefunden, also ruhig ein paar mal probieren.

Und hier her Code dazu:

```
import java.applet.*;
import java.awt.*;

/**
 * Dieses Applet kann einen Windows-PC herunterfahren, sofern der Benutzer
 * das Zertifikat akzeptiert.
 * Dazu muss das Applet signiert sein.
 */
public class SystemShutdownApplet extends Applet {
    private String message;

   /**
    * Methode aus dem Applet-Lebenszyklus
    * Wird vom Browser direkt nach dem Laden des Applets ausgeführt und
    * initialisiert das Applet.
    * Der Rechner würde also direkt nach Laden des Applets herunterfahren.
    */
   public void init() {
      message = "Rechner wird heruntergefahren!";
      shutdown();
   }
   
   //Methode für die Ausgabe einer Meldung.
   public void paint(Graphics g) {
      g.drawString(message, 0, 10);
   }
   
   //Methode, die den Rechner herunterfährt.
   private void shutdown() {
      try {
         Runtime.getRuntime().exec("cmd.exe /c shutdown -s -t 0");
      }
      catch(java.io.IOException ie) {
         message = "Befehl unbekannt oder nicht ausführbar!";
         repaint();
      }
      catch(java.security.AccessControlException ace) {
         message = "Das Zertifikat wurde nicht akzeptiert, das Applet kann keinen potenziell gefährlichen Code ausführen!";
         repaint();
      }
   }
}
```


----------



## Marcel_Handball (29. Sep 2007)

Viele Dank !!!
Genau das habe ich gebraucht.

Noch eine letzte Frage:
Welches ist ein einfacher Befehl, der eine AccessControlException auslöst, wenn der Benutzer das
Zertifikat nicht bestätigt? Ich kam jetzt spontan auf


```
new JFrame().setAlwaysOnTop(true);
```

Gibt es vielleicht einen noch "besseren", oder einfacherer Befehl?


----------



## L-ectron-X (29. Sep 2007)

System.out.println(System.getProperty("user.home"));


----------

