Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Applet und SSL

1 view
Skip to first unread message

Norbert Schäfers

unread,
Mar 25, 2006, 3:47:58 PM3/25/06
to
Hallo,

ich habe ein Client/Server System, welches ich gerade auf SSL (-Sockets)
umgestellt habe. Läuft auch alles problemlos.
Der Client kann aber auch als Applet laufen. Wenn ich dies tue, so gibt
es leider folgende Exception:

Exception in thread "AWT-EventQueue-3"
java.security.AccessControlException: access denied
(java.util.PropertyPermission javax.net.ssl.trustStore write)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.System.setProperty(Unknown Source)

Was mich an der Meldung wundert ist, das "write" in der Fehlermeldung.
Das Applets nicht schreiben können ist klar, aber warum versucht es das?
Auf den TrustStore wird doch nur lesend zugegriffen.
Oder liegt mein Fehler ganz woanders?

Wäre für jeden Tipp sehr dankbar!


Viele Grüße
Norbert


Java-Groupware: http://www.alphaagent.de

Bernd Eckenfels

unread,
Mar 25, 2006, 4:17:40 PM3/25/06
to
Norbert Schäfers <n.sch...@sowas.com> wrote:
> java.security.AccessControlException: access denied
> (java.util.PropertyPermission javax.net.ssl.trustStore write)
> at java.security.AccessControlContext.checkPermission(Unknown Source)
> at java.security.AccessController.checkPermission(Unknown Source)
> at java.lang.SecurityManager.checkPermission(Unknown Source)
> at java.lang.System.setProperty(Unknown Source)
>
> Was mich an der Meldung wundert ist, das "write" in der Fehlermeldung.
> Das Applets nicht schreiben können ist klar, aber warum versucht es das?

Vermutlich will er einen eigenen ssl truststore konfigurieren. Wenn du das
Applet signierst muesste das gehen. Oder du aenderst das policy file und
erlaubst dem applet den schreibzugriff auf das system property. Ein Blick in
den Source könnte die Frage aber klaeren...

Gruss
Bernd

georg w. mueller

unread,
Mar 25, 2006, 9:01:13 PM3/25/06
to
Norbert_Schäfers <n.sch...@sowas.com> wrote ...

> ich habe ein Client/Server System, welches ich gerade auf SSL
> (-Sockets) umgestellt habe. Läuft auch alles problemlos.
> Der Client kann aber auch als Applet laufen. Wenn ich dies
> tue, so gibt es leider folgende Exception:
>
> Exception in thread "AWT-EventQueue-3"
> java.security.AccessControlException: access denied
> (java.util.PropertyPermission javax.net.ssl.trustStore write)
> []

>
> Was mich an der Meldung wundert ist, das "write" in der
> Fehlermeldung. Das Applets nicht schreiben können ist klar,
> aber warum versucht es das? Auf den TrustStore wird doch nur
> lesend zugegriffen. Oder liegt mein Fehler ganz woanders?
>
> Wäre für jeden Tipp sehr dankbar!

Ein educated guess (aka Fischen im Halbtrueben):

Wenn ich dass Problem richtig deute, versucht das Applet, das
Servercertifikat in seinem eigenen Keystore abzulegen (analog
zur Vorgangsweise eines Browsers, bei einer SSL-Verbindung den
User zu fragen, ob dem entsprechenden Server jetzt|immer|nie
vertraut werden soll, um dessen Certifikat daraufhin ent-
sprechend zu verwahren). Es scheint noetig, dem Applet einen
Store unterzuschieben, der _nicht im Filesystem liegt.

lt.: http://forum.java.sun.com/thread.jspa?threadID=479169

| Overview: I need to make an Applet communicate with a server
| using an SSLSocket and I can't figure out how to include a
| truststore when running the applet in a web browser.

Eine vorgeschlagene Loesung:
<quote>
SSLSocketFactory.getDefault() will always initialize via the
javax.net.ssl.trustStore java system property, which only
accepts a filename.. but we can create and initialize our own
SSL context:

KeyStore ks = KeyStore.getInstance("jks");
ks.load(new FileInputStream("myTrustStore.jks"), null);

Here I have loaded a file, but you can use any InputStream
source.
For example, use ClassLoader.getResourceAsStream() to load from
your applet's jar file, or use new URL(applet.getCodeBase(),
"myTrustStore.jks").openStream() to load from the same directory
on the server where the applet resides.

TrustManagerFactory tmf = TrustManagerFactory.getInstance
(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
SSLContext ctx = SSLContext.getInstance("SSLv3");
ctx.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory ssf = ctx.getSocketFactory();

Now you can use ssf.createSocket()
</>

Plan B (Schuss ins Blaue): Tritt der Fehler auch auf, wenn das
Applet via HTTPS geladen wird?

HTH & liebe Gruesse -

- georg

Norbert Schäfers

unread,
Mar 26, 2006, 11:36:08 AM3/26/06
to
Hallo,

der Link sieht sehr vielversprechend aus.
Ich werde es Montag ausprobieren.

Auf jeden Fall vielen Dank!!!

Gruß
Norbert

Java-Groupware: http://www.alphaagent.de

0 new messages