# TLS - Packete mit Java auswerten



## Linad (29. Mrz 2005)

Hallo!!

Ich möchte ein Auswertungs Tool mit Java schreiben. Ich habe ein Programm, dass über das Protokoll "TLS" Daten mit dem Server austauscht. Ich möchte jetzt die Packete, das dieses Programm bekommt auch mit meinem Statistik Tool erfassen. Ich habe leider nicht so grosse Erfahrung mit Netzwerkprogrammierung in Java.

"TLS" heisst "Transport Layer Security" und ist so glaube ich eine Weiterentwicklung von SSL oder so...

Ist es irgendwie möglich, an die Informationen dieser Packete zu gelangen, damit ich mit Java dann Log Files erstellen kann?

Gruss
tikami


----------



## stev.glasow (29. Mrz 2005)

TLS ist mit der JSSE möglich.
Für  SSL Verbindungen nutze ich immer meine SSLTool Klasse:
Vielleicht hilft dir das ja etwas:

```
import java.security.*;
import javax.net.ssl.*;
import java.io.*;

public class SSLTool{

    public static SSLServerSocketFactory getServerSocketFactory(String keystore, String storepass, String truststore, String trustpass) throws GeneralSecurityException, IOException{
        return getContex(keystore, storepass, truststore, trustpass).getServerSocketFactory();
    }

    public static SSLSocketFactory getSocketFactory(String keystore, String storepass, String truststore, String trustpass)  throws GeneralSecurityException, IOException{
        return getContex(keystore, storepass, truststore, trustpass).getSocketFactory();
    }

    private static SSLContext getContex(String keystore, String storepass, String truststore, String trustpass) throws GeneralSecurityException, IOException{

        KeyManagerFactory kmf = null;
        if(keystore != null){
            char[] storepassChars =  storepass.toCharArray() ;
            KeyStore  mykey = KeyStore.getInstance("JKS" , "SUN");
            mykey.load(new FileInputStream(keystore)  , storepassChars);
            kmf = KeyManagerFactory.getInstance("SunX509" );
            kmf.init(mykey , storepassChars);
        }

        TrustManagerFactory tmf = null;
        if(truststore != null){
            char[] trustpassChars =  trustpass.toCharArray();
            KeyStore trustkey = KeyStore.getInstance("JKS" , "SUN");
            trustkey.load(new FileInputStream(truststore)  , trustpassChars);
            tmf = TrustManagerFactory.getInstance("SunX509" );
            tmf.init(trustkey);
        }

        SSLContext context = SSLContext.getInstance("TLSv1");
        context.init(kmf==null?null:kmf.getKeyManagers() , tmf==null?null:tmf.getTrustManagers() ,null);
        return context;
    }



}
```


----------



## Linad (29. Mrz 2005)

Danke! Muss dein Code mal testen -> aber sicherlich mal einen Anfang.

Gibt es denn keine Probleme wegen der Verschlüsselung? Kann ich die Packete ohne Probleme mit Java lesen?


----------



## stev.glasow (29. Mrz 2005)

Ich habs ein paar mal für Probleme genutzt wo ich Server und Client entwickeln musste, die eigens generierten Schlüssel hab ich dann einfach entsprechend mitgeliefert. Es lief eigentlich auch ohne Probleme und war auch alles schön verschlüsselt.
keystore und truststore sind die namen der Schlüssel, storepass und trustpass sind die Passwörter für die Schlüssel (storepass  für den keystore und trustpass für den truststore). Die Variablennamen sind etwas unglücklich gewählt.
Also du brauchst die (bzw. den) Schlüssel und ab geht die Post. Die Sprachen oder was auch immer sind dabei ja egal solang sich beide Seiten an den Standart halten.


----------



## Guest (29. Mrz 2005)

Ich habe leider den Schlüssel nicht! Die Applikation, zu der ich ein Auswertungstool schreiben möchte ist nicht von mir. 

Ist eine TLS Packet immer verschlüsselt?


----------



## stev.glasow (29. Mrz 2005)

Muss nicht, ist aber ehr üblich. Aber kein Ahnung wo du den Schlüssel herbekommst  :? Vielleicht weiß ja jemand anderes noch was. Oder ist der Server irgendwie öffentlich zugänglich? Sprich kann ich mal versuchen mich mit ihm zuverbinden?


----------



## stev.glasow (29. Mrz 2005)

uf, jetzt hab ich deine Frage nochmal vernüftig gelesen - du hast  einen Client, der verschlüsselte Daten an einen Server schickt bzw. verschlüsselte Daten von diesem empfängt. Beides, Server und Client sind nicht von dir, du hast keinen Schlüssel willst aber mithören was die für Daten austauschen. Hab ich das richtig verstanden? Wenn ja kann ich dir sagen dass das nix wird, denn sonst bräuchten die die Daten ja erst gar nicht verschlüsseln, wenn doch eh jeder mit hören kann. Und selbst wenn du den Schlüssel hättest, den der Client zum verschlüsseln nutzt, könntest du die Daten immer noch nicht entschlüsseln um sie mit zu loggen.
Ich bin die ganze Zeit davon ausgegangen, das du dich mit einem Server verbinden und mit diesem verschlüsselte Daten austauchen willt. Mein Fehler hab nicht richtig gelesen.


----------

