Android Simpler TLS/SSL Client

Mindfreak

Mitglied
Hallo zusammen,

ich schaffe es einfach nicht einen einfachen TLS Client(TCP) zu bauen. Seit Wochen komme ich nicht weiter. Und zwar möchte ich einfach nur in einer App eine Verbindung zu einem Server aufbauen. Dann möchte ich dem Server eine Nachricht schicken und einfach das Echo davon erhalten. Also nichts kompliziertes. Ich selbst nutze Android Studio dafür und schreibe in Java. Der Server ist in C++ geschrieben und funktioniert auch (mit C++ Client getestet). Das Zertifikat habe ich als .pem vorliegen. Da ich nun schon so viele Wochen nicht weiter komme, suche ich jemandem der einfach mal via Teamviewer/AnyDesk mit Skype/Teamspeak etc. schaut was da schief läuft. Die Angelegenheit ist mir so wichtig, dass ich gern dazu bereit bin dafür zu zahlen. Schreibt mir eine PN oder einfach hier drunter. Ich hoffe mir kann jemand helfen und freue mich auf eure Antworten. ;)
 

Mindfreak

Mitglied
https://pastebin.com/Mn7Wx4ud


Wenn ich so meinen Code versuche zum laufen zu bringen, kommt die Fehlermeldung, welche unten zu sehen ist. Daraufhin habe ich erfahren, dass ich den Code in AsyncTask schreiben muss. Ich weiß aber nicht wie ich es sauber zum Laufen bekomme.



E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.oliverlenk.pmt, PID: 2387
android.os.NetworkOnMainThreadException
 
Zuletzt bearbeitet:

mihe7

Top Contributor
1. Du musst Dir den Stacktrace genauer ansehen
2. Schreib das Zeug mal um auf javax.net.ssl.* - das Apache Zeug ist deprecated.
 

mihe7

Top Contributor
Mach das, und pirsche Dich mal schrittweise an das Problem ran: einfach mal eine SSL-Connection gegen einen Server Deiner Wahl mit einem von einer anerkannte CA ausgestellten SSL-Zertifikat (z. B. www.google.de), Port 443 aufbauen, einen Request "GET / HTTP/1.0\n\n" absetzen, die Antwort abrufen/ausgeben.
 

mihe7

Top Contributor
Hier mal ein zusammengeschustertes Beispiel in Java SE:

Java:
import java.io.*;
import java.nio.charset.*;
import java.net.*;
import javax.net.*;
import javax.net.ssl.*;

public class Test {
    public static void main(String[] args) throws Exception {
        SocketFactory ssf = SSLSocketFactory.getDefault();
        Socket socket = ssf.createSocket(
            InetAddress.getByName("www.google.de"), 443);
        OutputStream os = socket.getOutputStream();
        os.write("GET / HTTP/1.0\n\n".getBytes(StandardCharsets.UTF_8));
        os.flush();

        BufferedReader reader = new BufferedReader(new InputStreamReader(
            socket.getInputStream(), StandardCharsets.UTF_8));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        socket.close();
    }
}
 

Mindfreak

Mitglied
Guten Abend,

@mihe7 danke erstmal für deine Bemühungen.
Zu deinem Code Beispiel. Ich hab bereits in eclipse ein SSL Client gebaut, der zumindest erfolgreich senden und empfangen konnte. Mit den selben Zertifikat wie ich es auch nutze im Android Studio. Was ich dort gebaut habe, sah ähnlich wie dein beispiel aus.

Ich kann das aber nicht so umsetzen im Android Studio. Funzt einfach nicht. Dementsprechend hab ich den Code wie oben zusammengebaut. Hab schon erfahren das es so auch nicht mehr geht, seid Android 3.0. Wie du schon sagtest extrem veraltet. Ich hab das ganze Problem schon versucht auf Stackover.....zu lösen. Die Antwort war "du musst das in AsyncTask schreiben" Hab versucht mehr darüber zu erfahren. Meine Bücher gewälzt und ein wenig im netz gesucht. Bisher aber nicht erfolgreich.

Hast du schon von AsyncTask gehört?
 

mihe7

Top Contributor
AsyncTask ist dafür da, um Aufgaben (die eine gewisse Verbindung zum UI haben) im Hintergrund auszuführen. Ich probier das nachher mal aus.
 

Oben