2014-07-21 17 views
5

Ich entwickelte eine Anwendung, die mit TCP-Sockets arbeitet.Wie TLS mit Java arbeiten?

Nun würde Ich mag es, mit einer TLS-Verbindung zu arbeiten.

Ich suchte einige Ressourcen für jetzt 2 Tage, aber es gibt nichts, das wie ein Tutorial zur Implementierung von TLS aussieht.

Hier ist, was ich verstanden, was ich zu tun habe:

  • Ich habe meine Stamm-CA in meinem Schlüsselspeicher importieren.
  • Ich muss einige andere Zertifikate in meinem Keystore/Truststore importieren.

Ich kann keine klare Beispielcode finden, die wirklich erklären, was zu tun ist.

Können Sie mir bitte mit einem Client/Server-Beispiel oder einem anderen hilfreichen Tutorial helfen? (Ich habe bereits versucht, "TLS Java", "TLS Java Beispiel", "TLS Java Tutorial" .... Aber ich konnte nichts befriedigendes finden.)

Vielen Dank im Voraus für Ihre Aufmerksamkeit.

+0

Ist Ihre Frage speziell über TLS (im Gegensatz zu SSL gegen) Versuchen Sie, SSL/TLS selbst zu implementieren, oder sind Sie bereit, das zu aktivieren, was bereits in JSSE für Ihre Anwendung vorhanden ist? – Bruno

+0

Ich möchte gerne implementieren, was bereits in der JSSE ist. – Kaijiro

+0

Nur zur Verdeutlichung, vermutlich, damit meinst du * benutze * was ist schon in der JSSE, * repliziere * nicht was in der JSSE ist? – Bruno

Antwort

13

Es gibt zwei Wege, dies zu erreichen.

Die easyest liegt in Java-Protokoll-Unterstützung und das URL Objekt.

Aber da ich glaube, Sie bereits herausgefunden, dass new URL("https://www.google.com").openStream() gibt Ihnen einen klaren Texteingabe-Stream während mit allen TLS/SSL-Material für Sie zu tun, ich werde für die „harten“ Weg gehen :)

Nur Bevor ich Ihre andere Frage beantworte, importieren Sie eine CA. CA-Zertifikate werden in Ihre Java-Haus befindet sich an einem der Thesen Standorte: $JAVA_HOME/lib/security/cacerts (JRE) oder $JAVA_HOME/jre/lib/security/cacerts (JDK, beachten Sie die ‚jre‘ kurz nach dem Java-home) sowohl für das Standardkennwort ist „changeit“

zu statt -list

So, jetzt gehen wir für die "harten" Weg (Client-Code)

$ keytool -list -keystore cacerts -storepass changeit 

Um einen neuen cert fügen Sie einfach den -import subcommand verwenden: list es Inhalt ist Sie keytool Befehl verwenden können

import javax.net.SocketFactory; 
import javax.net.ssl.SSLSocketFactory; 
... 
String host = "www.google.com"; 
int port = 443; 
SocketFactory basicSocketFactory = SocketFactory.getDefault(); 
Socket s = basicSocketFactory.createSocket(host,port); 
// s is a TCP socket 
SSLSocketFactory tlsSocketFactory = SSLSocketFactory.getDefault(); 
s = tlsSocketFactory.createSocket(s, host, port, true); 
// s is now a TLS socket over TCP 

ist es so einfach.

Wenn Sie den Code, um einen Server-Socket müssen fast die gleiche ist, man muss nur SocketFactory Austausch für ServerSocketFactory und SSLSocketFactory für SSLServerSocketFactory

hoffe, das hilft

+0

In JRE7 gibt es keine Datei oder Ordner namens Truststore. Soll ich einen erstellen oder ist das mit Keytool erledigt? – Kaijiro

+0

Sorry Kaijiro, ich schrieb meine Antwort aus dem Speicher, der Dateiname ist 'cacerts' nicht -truststore- Ich korrigiere meine Antwort – Cerber