# Sicherheitswarnung: Verbindungsaufbau...



## dior (27. Jul 2012)

Hi,

ich habe ein kleines Prog das mir eine Tabelle aus einer Datenbank ausliest. Wenn ich das Prog mittels jnlp starte kommt die Meldung:



> Sicherheitswarnung
> 
> Anwendung hat eine Berechtigung für den Verbindungsaubau zu "meiner Datenbank" angefordert.
> Möchten Sie diese Aktion zulasse?
> ...



und dann noch eine mit der gleichen Meldung nur hier Verbindung zu "meinem PC"

kann ich das irgendwie im vorhinein einstellen das die Abfrage nicht kommt bzw. immer mit ok beantwortet wird das man das nicht immer bestätigen muss?


----------



## Marco13 (27. Jul 2012)

Schau mal unter http://www.java-forum.org/applets/16717-applets-webstart-anwendungen-signieren.html - vielleicht hilft das schon.


----------



## dior (27. Jul 2012)

Danke, aber wenn ich das richtig verstehe dann kommt die Sicherheitswarnung auch wenn die Anwendung signiert wurde.... 



> . Die Signierung des Programms durch den Programmierer selbst.
> Dabei wird mit den Tools des JDK/SDK ein Zertifikat erzeugt.
> 
> In beiden Fällen öffnet sich vor dem Start der Anwendung ein Fenster mit einem Sicherheitshinweis, welches sich vom Benutzer die Erlaubnis einholt, eventuell potenziell unsichere/gefährliche Operationen auf seinem System durchführen zu dürfen.
> Der Benutzer selbst muss entscheiden, ob er dem Applet vertrauen möchte, oder nicht.



Da ich das aber alles in einem Intranet laufen lassen will will ich auch keine Sicherheitsabfragen die zu bestätigen sind. ???:L


----------



## dior (27. Jul 2012)

Also die erste Sicherheitswarnung konnte ich ausschalten indem ich im java.policy File die Permissions für:


> permission java.net.SocketPermission "Mein Servername", "resolve";
> permission java.net.SocketPermission "Meine ServerIPort", "connect,resolve";



hinzugefügt habe.

Jetzt kommt nur noch die 2. Meldung welche den zugriff auf meinen PC (in der Warnung steht der Name meines PC) erlauben soll. (hier ist aber egal ob ich auf ok oder abbrechen drücke es kommt immer das Ergebnis)

Hier weis ich nicht wie die Permission lautet da mir die Java Console heinen Fehler ausgibt bei Abbrechen...
Hat jemand eine Ahnung?


----------



## dior (27. Jul 2012)

ok, hat sich erledigt... danke für eure Hilfe:


Lösung:
permission java.net.SocketPermission "Mein PCName", "connect,resolve";


----------



## Guest2 (27. Jul 2012)

Moin,

ich vermute das Dir das bewusst ist, aber nur zur Sicherheit (und für evtl. mitlesende):

Das mit dem policy file funktioniert nur auf den Rechnern, bei denen das policy file auch bereits lokal vorhanden ist (mit den entsprechenden Anpassungen). Im Intranet mit administrativem Zugriff auf alle Rechner welche die Anwendung ausführen sollen also eine mögliche Lösung. Allgemein funktioniert das aber nicht.

Viele Grüße,
Fancy


----------



## dior (27. Jul 2012)

Danke, ja ist mir bewusst... und in meinem Fall ist das Administrativ bewältigbar 

abgesehen davon kenne ich keine andere Lösung... Wenn es eine gibt würde ich vermutlich diese bevorzugen


----------



## Guest2 (27. Jul 2012)

Vermutlich keine die Dir besser gefällt. 

Für den Fall das sich Entwickler und Nutzer der Anwendung nicht kennen ist das Verhalten oben schon das Optimum. Die Anwendung will außerhalb der Sandbox agieren, die Sandbox erfragt genau die benötigten Rechte beim Nutzer und die Sache läuft. Der Nutzer braucht dann keine Sorgen zu haben, dass ihm die Anwendung nebenher noch die Platte leerräumt.

Dahinter steht die JNLP API, die für viele Einsatzmöglichkeiten eine feingranulare Zugriffsteuerung erlaubt. Die Anwendung zu signieren und dann gleich alle Zugriffsrechte einzufordern wäre eine andere Möglichkeit. Schön ist das für den Nutzer aber nicht, er ist dem Entwickler dann hilflos ausgeliefert. Der Nutzer hat nur die Wahl dem Entwickler zu vertrauen oder eben nicht.

Für interne Zwecke ist das policy file schon sehr gut. Je nach Sicherheitsanforderungen muss man lediglich ein wenig aufpassen, das man nicht versehentlich zu viel erlaubt. So wie Du das jetzt eingetragen hast, gilt diese Regel für alle. Das heißt, ein "Evil Applet" darf auch aus der Sandbox raus und sich mit den beiden Rechnern verbinden. Man kann das im policy file auch weiter einschränken (codeBase und signedBy). Wird dann das policy file zusammen mit einem Zertifikat (kann ein selbst signiertes sein) auf die betroffenen Rechner ausgerollt (in den dortigen trust store importiert), kann man die Anwendung sehr sicher gestallten. Dazu die Anwendung signieren aber nicht alle Rechte einfordern und "Trusted-Only: true" sowie "Sealed: true" ins Manifest der Jars. Weil das Zertifikat bereits im trust store des Nutzers ist, kommt es zu keinerlei Nachfragen beim Nutzer. Gleichzeitig ist sichergestellt, dass nur dieser speziell signierte Code die erlaubten speziellen Rechte bekommt. Versucht sich anderer Code da einzumischen, schreitet die Sandbox ein.

Ob man diese Sicherheit braucht / will ist aber eine andere Frage. Daher ist die Lösung die Du jetzt hast vermutlich schon ziemlich gut. 

Viele Grüße,
Fancy


----------

