# No trusted certificate found



## Peter Kohnle (8. Aug 2007)

Hallo Zusammen,

hoffe, ich bin hier im richtigen Forum gelandet 

Ich habe heute schon den ganzen Tag im Netz gesucht, um eine Lösung zu finden, aber so richtig komme ich da immer noch nicht weiter.

Folgendes ist der Ausgangspunkt: Der Benutzer eines PDM-Systems loggt sich ganz normal auf dem Server (Tomcat) ein, die Verbindung ist ungesichert, weil alles im lokalen Intranet passiert. Nun hat er eine Möglichkeit, über einen Link seine Daten zu archivieren. Das Archiv steht nun an einer anderen Location, Zugriff dort erfolgt über Apache WebServer. Die Daten sollen mittels WebDAV übertragen werden, da das ganze nun übers WWW geht, ist eine sichere Verbindung vom Tomcat zum Apache zwingend erforderlich. Das genutzte Zertifikat soll ein "self-signed" sein.

So, nur bisher scheitern meine Versuche, eine SSL Verbindung aus Java aufzubauen. Auf diversen Seiten habe ich verschiedene Anleitungen gelesen, und danach mit diesem "keytool" die entsprechenden Zertifikate erstellt. Rufe ich nun danach die sichere URL im Browser auf, wird das Zertifikat angezogen, und ich muss es bestätigen. Daher nehme ich mal an, dass ich nix grundlegendes falsch gemacht habe.

Nun versuche ich die Verbindung aus Java herzustellen, und bekomme diesen besagten Fehler

```
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
```

Auch danach habe ich gesucht, ebenfalls hier im Forum. Habe auch diverse Hinweise gefunden, allerdings immer nur, was der Fehler ist/sein könnte. Ich habe daraus verstanden, dass ich mein Zertifikat diesen keystore und diesem truststore hinzufügen muss. Was ich leider nicht gefunden habe ist, wie ich das genau bewerkstellige. Irgendwie auch mit diesem "keytool"??

Und dann muss ich auch im Java-Code noch einige System-Properties setzen??

Weiß darüber jemand vielleicht genaueres?

Vielen Dank im Voraus,
Peter


----------



## PELLE (8. Aug 2007)

Peter Kohnle hat gesagt.:
			
		

> Hallo Zusammen,
> 
> hoffe, ich bin hier im richtigen Forum gelandet
> 
> ...



Ich sitz grad nicht am büro pc wo mein code liegt, morgen bekommst du mehr...

Die Fehlermeldung besagt, dass dein Zertifikat auf dem client pc entweder nicht vorhanden ist oder es ist im falschen Verzeichnis:

System.setProperty ("javax.net.ssl.keyStore","JAVA_HOME/lib/security/jssecacerts");
System.setProperty("javax.net.ssl.keyStorePassword","changeit");

obiges sollte bei dir im code stehen, natürlich angepasst! 

http://portecle.sourceforge.net/ das app hilft dir weiter...

schick mir doch mal ne pm und notfalls gehst du ins java sun forum, subforum JNDI die wissen alles  JNDI und das java forum hier kannste knicken ;-)


so das ist mein keystore dinges:


```
String keystore = "c:/Programme/Java/jre1.6.0_01/lib/security/ZertifikatBerlin"; 
		 System.setProperty("javax.net.ssl.trustStore",keystore);[/code

doch noch auf usb stick gefunden ^^ dein zertifikat sollte/muss... in dem verzeichnis siehe oben liegen : 

java_home/jre/lib/security/deinzertifikatdatei
```


----------



## Peter Konhle (9. Aug 2007)

Hallo,

vielen Dank für die schnelle Antwort.

Das portecle hilft einem wirklich weiter 

Ich probiere das gleich mal aus. Möchte noch wissen, ob ich das auch richtig verstanden habe:

Ich füge mein Zertifikat auf dem Rechner, der die SSL Verbindung zum Apache aufbaut (in meinem Fall der Rechner wo die Datenbank und der Tomcat läuft) dem keystore "cacerts" in %JAVA_HOME%/jre/lib/security hinzu, und setze dann einfach im Code die 3 System-Properties. Mmh, was ich jetzt immer noch nicht verstanden habe ist, dieser trustStore... muss das nun das eigentliche Zertifikat sein oder muss das auch nur eine Datei sein, die wie der keystore nur verwaltet? Da ist irgendwie nie ne Endung angegeben, daher macht mich das stutzig.



```
System.setProperty ("javax.net.ssl.keyStore",System.getProperty("java.home")+"/lib/security/cacerts");
System.setProperty("javax.net.ssl.keyStorePassword","changeit"); 
System.setProperty("javax.net.ssl.trustStore",System.getProperty("java.home")+"/lib/security/testZertifikat.cert");
```

Gruß,
Peter


----------



## PELLE (11. Aug 2007)

> Mmh, was ich jetzt immer noch nicht verstanden habe ist, dieser trustStore... muss das nun das eigentliche Zertifikat sein oder muss das auch nur eine Datei sein, die wie der keystore nur verwaltet? Da ist irgendwie nie ne Endung angegeben, daher macht mich das stutzig.



Der trustStore interessiert dich doch gar nicht! Völlig egal für dich! Du musst deinem java client sagen wo dein zertifikat auf dessen FEstplatte liegt.

bei mir hier: "c:/Programme/Java/jre1.6.0_01/lib/security/ZertifikatBerlin" 

ZertifikatBerlin ist meine Zertifikatsdatei (hat keine dateiendung...)

keystore ist nur eine String variable... kannst auch so schreiben das ganze:


System.setProperty("javax.net.ssl.trustStore","c:/Programme/Java/jre1.6.0_01/lib/security/ZertifikatBerlin");

exportiere mit dem protecle app deine eigene zertifikatdatei und lege diese in das verzeichnis:

javahome/jre/lib/security/deinZertifikat


----------

