Probleme mit 'JSSE Samples' von Sun

Status
Nicht offen für weitere Antworten.

Ice-Tea

Bekanntes Mitglied
Hallo zusammen,

ich bin grade dabei eine Beispielimplementierung von Sun (klick mich) zum laufen zu bringen. ( Das RMI Beispiel )

Ich bin wie folgt vorgegangen:

Da alles in einem Ordner liegt hab ich es erstmal auseinandergepflückt.

Hallo.java
HalloImpl.java
testkeys
policy
RMISSLClientSocketFactory.java
RMISSLServerSocketFactory.java

liegen nun im Ordner rmiServer\rmi\test (Package: rmi.test)



Hello.java
HelloClient.java
RMISSLClientSocketFactory.java

liegen im Ordner rmiClient\rmi\test (Package: rmi.test)


Nachdem ich

Code:
ks.load(new FileInputStream("testkeys"), passphrase);

in

Code:
ks.load( getClass().getResourceAsStream("testkeys"), passphrase);

geändert habe, war es der Beispielimplementierung auch möglich zu starten. (Vorher gabs eine FileNotFound bzw. Secrurity Exception)

Nur leider hab ich beim Client immer noch probleme.

Hier die Exception:


Code:
HelloClient exception: error during JRMP connection establishment; nested exception is: 
        javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
        javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at rmi.test.HelloClient.main(HelloClient.java:61)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1520)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:511)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:621)
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at java.io.DataOutputStream.flush(DataOutputStream.java:106)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:211)
        ... 4 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
        at sun.security.validator.Validator.validate(Validator.java:218)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
        ... 15 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
        ... 21 more
BUILD SUCCESSFUL (total time: 5 seconds)

Hat jemand eine Ahnung wodran das liegen mag?
 

semi

Top Contributor
Dein Problem ist, dass die Beispiel-Zertifikate in deiner Umgebung nicht bekannt sind.
Lasse es mal wie folgt laufen (ich gehe davon aus, dass du es im Verzeichnis rmi startest)
Code:
Server

java -Djavax.net.ssl.trustStore=../samplecacerts -Djavax.net.ssl.trustStorePassword=changeit 
-Djava.security.policy=./policy HelloImpl

Client
java -Djavax.net.ssl.trustStore=../samplecacerts -Djavax.net.ssl.trustStorePassword=changeit 
-Djava.security.policy=./policy HelloClient
 

Ice-Tea

Bekanntes Mitglied
Also, so langsam verzweifele ich...

Obwohl ich die ganze sache nun etwas vereinfacht habe (ohne SSL), klappts immer noch nicht. :(

Ich habe erneut ein HalloWelt Beispiel.

Es funktioniert sogar! Jedoch sobald ich den RMISecurityManager aktiviere bekomme ich beim Client Exception:
Code:
Access denied (java.net.SocketPermission 172.16.154.22:2099 connect,resolve)


So langsam schein es mir so, als ob die JVM meine eigene policy nicht annehmen will
Start mit:
Code:
java -Djava.security.policy=pfad/policy HalloServer



Was mache ich denn falsch?

EDIT:
policy Inhalt:
Code:
// In this example, for simplicity, we will use a policy file that
// gives global permission to anyone from anywhere. Do not use this
// policy file in a production environment.

grant {
	permission java.net.SocketPermission "*", "accept,resolve";
};
 
G

Guest

Gast
Server
Code:
grant { 
   permission java.net.SocketPermission "*", "accept,resolve"; 
};
Client
Code:
grant { 
   permission java.net.SocketPermission "*", "connect,resolve"; 
};
oder wenn dir das alles zu bunt erscheint :wink:
Code:
grant { 
   permission java.net.AllPermission; 
};
 

Ice-Tea

Bekanntes Mitglied
So, nun hab ich auch die SSL geschichte zum laufen gebracht - allerdings wieder ohne SecurityManager!


Interface:
Code:
package rmi.test;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
    String sayHello() throws RemoteException;
}

Client:
Code:
package rmi.test;

import java.net.InetAddress;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import java.rmi.RMISecurityManager;

public class HelloClient {
    
    private static final int PORT = 2019;
    
    public static void main(String args[]) {

        System.setProperty("javax.net.ssl.trustStore", "C:/Dokumente und Einstellungen/HU/Desktop/rmiClient/rmi/test/Client_Truststore");

        /*if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }*/
        try {
            
            SslRMIClientSocketFactory rmiCSF =
                    new SslRMIClientSocketFactory();

            Registry registry = LocateRegistry.getRegistry(
                    InetAddress.getLocalHost().getHostName(), PORT,
                    rmiCSF);
            

            Hello obj = (Hello) registry.lookup("HelloServer");
            
            String message = "blank";
            message = obj.sayHello();
            System.out.println(message+"\n");
        } catch (Exception e) {
            System.out.println("HelloClient exception: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Server:
Code:
package rmi.test;
/*
Neues JKS anlegen und einen Schlüssen unter dem Alias SecureServer anlegen:
keytool -genkey -alias SecureServer -keyalg RSA -keystore ServerKeyStore


Erstelle Server-Certificate nach RFC:
keytool -export -alias SecureServer -keystore ServerKeyStore -rfc -file Server.cer

Public Certificate in ein neues JKS importieren:
keytool -import -alias SecureServer -file Server.cer -keystore Client_Truststore
 */

import java.io.*;
import java.net.InetAddress;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;

public class HelloImpl extends UnicastRemoteObject implements Hello {
    
    private static final int PORT = 2019;
    
    public HelloImpl() throws Exception {
        super(PORT,
                new SslRMIClientSocketFactory(),
                new SslRMIServerSocketFactory());
    }
    
    public String sayHello() {
        return "Hello World!";
    }
    
    public static void main(String args[]) {
        System.setProperty("javax.net.ssl.keyStore", "C:/Dokumente und Einstellungen/HU/Desktop/rmiServer/rmi/test/ServerKeyStore");
        System.setProperty("javax.net.ssl.keyStorePassword", "DasWeißSelbstDerGeheimdienstNicht");


        // Create and install a security manager
        /*if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }*/
        
        try {
            SslRMIClientSocketFactory rmiCSF =
                    new SslRMIClientSocketFactory();
            SslRMIServerSocketFactory rmiSSF =
                    new SslRMIServerSocketFactory();

            Registry registry =
                    LocateRegistry.createRegistry(PORT, rmiCSF, rmiSSF);
            
            HelloImpl obj = new HelloImpl();
            
            registry.bind("HelloServer", obj);
            
            System.out.println("HelloServer bound in registry");
        } catch (Exception e) {
            System.out.println("HelloImpl err: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Im zusammenhang mit System.setProperty() noch eine frage:
gibt es eine möglichkeit sich den Pfad zur datei dynamisch zu holen?
Sonst müßte ich immer wieder anpassen...


Und natürlich wieder das Security-Problem:
Es will einfach nicht funktionieren!

Ich glaube nicht das es an der Permissions selbst liegt. Näher liegt, das er die Datei 'policy' nicht einliest.

Der Parameter
Code:
-Djava.security.Policy="C:/Dokumente und Einstellungen/HU/Desktop/rmiServer/rmi/test/policy"
brachte keinen erfolg.

Ich hab auch schon (keine Ahnung ob das überhaupt fuktioniert) mit
Code:
System.setProperty("java.security.Policy", "C:/Dokumente und Einstellungen/HU/Desktop/rmiServer/rmi/test/policy");
versucht, brachte aber ebenfalls nicht den gewünschten erfolg.


Die Permissions im file sind derzeit auf "permission java.net.AllPermission;" eingestellt.

Weiß nicht mehr weiter...
 

Ice-Tea

Bekanntes Mitglied
So, eine frage hab ich noch.

Da im momment alles funktioniert, wenn auch ohne SecurityManager, kann ich ja schon mal anfangen meine dezeit noch lokalen methoden auf den Server auszulagern.

Mir ist beim testen aufgefallen, das ich wenn ich zwei verschiedene packages nehme, zwingend ein Security Manager gebraucht wird. Ist das korrekt?

Welche nachteile enstehen mir ohne SM? (Sicherheitlücken?)

Wenn ich die richtlinien in der JVM eigen java.policy nachtrage entstehen dabei Nachteile im gegensatz zu einer eigenen policy?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
K Probleme bei HTML-Mail-Abruf mit IMAP bei 1und1 Netzwerkprogrammierung 2
L Socket SSLServer Probleme Netzwerkprogrammierung 0
H Probleme mit UDP Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
R Probleme mit JMS Netzwerkprogrammierung 1
A Probleme beim Klassen-Import von sun.misc. ... Netzwerkprogrammierung 19
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
B Probleme beim ersten Netzwerkprogramm Netzwerkprogrammierung 3
M Probleme mit FTP Netzwerkprogrammierung 19
windl URLConnection unter 1.7 macht Probleme Netzwerkprogrammierung 14
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
Maxim6394 Probleme bei Messenger Netzwerkprogrammierung 16
I Socket UDP Hole Punching bereitet Probleme Netzwerkprogrammierung 14
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
S HTTP Probleme mit POST-Befehl Netzwerkprogrammierung 2
R FTPS - Probleme mit FTPSClient Netzwerkprogrammierung 2
S Probleme mit XMLEncoder/XMLDecoder Netzwerkprogrammierung 2
D Server - Client Probleme Netzwerkprogrammierung 9
Weiti HTTP Zertifikat-Probleme - InstallCert.java Netzwerkprogrammierung 2
M Socket Probleme mit einfacher Socketverbindung Netzwerkprogrammierung 3
H Probleme mit GUI (RMI) Netzwerkprogrammierung 6
T RMI Probleme mit RMI-Server Netzwerkprogrammierung 4
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
T FTP Probleme mit Passiv und Binary Mode Netzwerkprogrammierung 3
J Probleme mit Threads (Client terminiert) Netzwerkprogrammierung 4
S Socket SocketServer und Client machen Probleme Netzwerkprogrammierung 6
B Server / Client Anwendung, Client GUI Probleme Netzwerkprogrammierung 11
F RMI probleme Netzwerkprogrammierung 3
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
E jPcap Probleme Netzwerkprogrammierung 3
B HTTP Probleme mit HttpClient? Netzwerkprogrammierung 2
T Probleme mit Jpcap Netzwerkprogrammierung 18
P Probleme mit OutputStream Netzwerkprogrammierung 7
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
L Probleme bei Chatserver Netzwerkprogrammierung 6
A Probleme mit kleinem Netzwerk Programm Netzwerkprogrammierung 30
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
G Probleme mit SecruityManager + RMI Netzwerkprogrammierung 10
derMartin Probleme mit NNTP Client Netzwerkprogrammierung 2
A Probleme mit Citrix Netzwerkprogrammierung 17
A Probleme mit kleinem Messenger-Programm Netzwerkprogrammierung 4
K RXTXcomm : Install - Probleme Netzwerkprogrammierung 7
R Probleme mit UDP Netzwerkprogrammierung 4
P Probleme bei Chat programm Netzwerkprogrammierung 2
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
E InetAddress Klasse-Probleme Netzwerkprogrammierung 4
M dateien übertragen, probleme mit versch. Strömen? Netzwerkprogrammierung 4
R Rechte Probleme bei Applets Netzwerkprogrammierung 16
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
P Probleme mit Input- / Output-Streams Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
F WLAN Probleme (CLIENT-SERVER) Netzwerkprogrammierung 4
J Probleme mit ObjectOutputStream! Netzwerkprogrammierung 15
S Probleme beim Beschränken der Geschwindigkeit Netzwerkprogrammierung 6
M Probleme beim Abfangen von Streams Netzwerkprogrammierung 5
G Fragen/Probleme mit JavaMail Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
C Probleme bei Dateiupload mit socket Netzwerkprogrammierung 4
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
C RMI Probleme mit iptables Netzwerkprogrammierung 2
D socket exception + timing probleme Netzwerkprogrammierung 2
G Probleme bei Proxy-Server! Netzwerkprogrammierung 5
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
D Habe 2 Probleme: Input eingabe und Multi Socket Server Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben