PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SSL in Java mit selbstsigniertem Serverzertifikat


Shink
2006-04-20, 17:45:14
Vielleicht hat ja von euch da jemand Erfahrung oder kann mir zumindest sagen, ob das geht:
Ich will mit verschiedenen Devices quasi-abhörsicher über SSL oder TLS kommunizieren. Diese erzeugen und signieren sich selbst ein Zertifikat, das dann natürlich nicht vertrauenswürdig ist und das ich auch nicht in einen Keystore importieren kann, da ich keinen Zugriff darauf hab.
Natürlich wirft Java eine Exception von wegen "No trusted certificate found".
Kann ich Java irgendwie dazu bringen, die Kommunikation trotzdem fortzuführen? Hier mein Code:

SSLSocket socket=(SSLSocket) SSLSocketFactory.getDefault().createSocket("192.168.80.169", 2601);
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
System.out.println(br.read());

Bei "br.read()" wird die Exception geworfen:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

Köppchen
2006-04-20, 23:08:58
Das hat die Websuche dazu geliefert:
http://forum.java.sun.com/thread.jspa?threadID=264584&messageID=1914893
http://tp.its.yale.edu/pipermail/cas/2004-March/000348.html
Du musst also den X509TrustManager und HostnameVerifier
selber implementieren musst um das zu deaktivieren.
Sicher kann man das dann nicht mehr nennen. Wenn du das Zertifikat nicht prüfst, so kann sich jeder als dein Kommunikationspartner ausgeben und alles entschlüsseln (http://de.wikipedia.org/wiki/Man-In-The-Middle-Angriff)

Gruß Markus

Shink
2006-04-21, 08:09:05
Ich weiß schon, was ich tu - darum hab ich ja auch "quasi-abhörsicher" gesagt. Vielleicht seh ich mich aber auch nach einer anderen SSL-Implementierung um, mal schauen was weniger Aufwand ist.

Shink
2006-04-21, 08:32:35
Übrigens: Danke, die Lösung von "aguilar_ivan" von der ersten Seite ist wirklich einfach und funktioniert tatsächlich.