Beiträge von Mindfreak

    Die Toast hab ich auch rausgenommen

    Hier nochmal der Fehlercode,



    um den Rest kümmer ich mich jetzt mal. Ich nehme jeden Hinweis dankend an. Bin noch kein Pro und ist noch ein Harter Kampf für mich mit Java

    Schau bitte nochmal drüber. Selbe Fehlermeldung noch.



    Vielen Dank. Ich kann das leider erst morgen Abend testen, weil ich bis dahin nicht zu Hause bin. Das der Server die Zertifikate mit ausgibt scheint ein Fehler bei meinem C++ Code gewesen zu sein. Ich habe den kompletten Puffer ausgegeben anstatt nur die angekommenen Bytes. Ich melde mich also morgen Abend nochmal.

    Ich schlüssle das obige mal auf:
    Also erst kommt die eigentliche Nachricht in Zeile 1.
    Ab Zeile 2 kommt der Rest unseres Diffie-Hellman Schlüssels.



    Code
    -----BEGIN DH PARAMETERS-----
    MIIBCAKCAQEAsbliBfUhTnrGVwBQGT7fVpNX8rqP0XgEsN79wslNxFZr4cC5rZ0k
    IgP8QnFW1l0C7J1HzDqjcPsyuXAKgcu4nMe6G81s0jQlt2xoBKzbOiGwPNx3ehMs
    h+NqOSWkJo1j87IPXLtbyyLtIPYeLtFQ1ihkGulvsxLQAwbFkqu29oC6l+1Nffvr
    tJIoVt9p0jtEk+qih+gUG/yXpeWlXFeAZbuYtgyMs/NowZx3LdziLf8hE5sYnBUp
    mseYBxu9SWe3fy35pM3zN6pG5GkZyoHgtAl2odNHeKtV4fesyQeBwRFv98ZnBFvN
    7mANau2qBh4lPNksKrDMlsJAQnwzGORXIwIBAg==
    -----END DH PARAMETERS-----

    (Siehe hier ab Zeile 7)



    Dann Zeile 4 kommt S-----, also nochmal das Ende des Diffie-Hellman Schlüssels.
    Ab Zeile 5 stammt das folgende aus unserem Private Key bis Zeile 19 Zeichen 31, also der "5".



    (Siehe Hier von Zeile 8 Zeichen 4 bis Zeile 22 Zeichen 31)



    Der Rest (;ñvT4k) ist mir unbekannt. Wahrscheinlich stimmt da was beim Encoding nicht^^.
    Das ist übrigens eh nur ein Testzertifikat. Deshalb teile ich meine Keys^^

    So folgendes ist passiert,


    hab das von dir übernommen und den Syntax nur ausgebessert.


    Ich drücke Senden, App stürzt ab folgende Fehlermeldung kommt.


    Code
    10-08 17:15:23.822 1814-1841/com.example.xxxxxx.xxx E/AndroidRuntime: FATAL EXCEPTION: Thread-4
        Process: com.example.xxxxxxx.xxx, PID: 1814
        android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


    Trotzdem war es schon mal ein erfolg.


    Es kam etwas beim Server an und zwar folgendes.
    Anbei ich habe als Nachricht "test" geschrieben



    Abend,


    ich hau mal ein Java Code rein damit es vielleicht die ein oder andere Frage klärt.




    was ich bisher erfahren habe, ist das die diese Methode veraltet ist. Laut aussagen muss man in AsyncTask die ganze Sache schreiben.



    Code
    E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.xxxxx.xxx, PID: 2387
                  android.os.NetworkOnMainThreadException


    Mein Fehlercode.


    Ich würde es gerne mal versuchen mit dem AsyncTask. Hab es aber noch nicht hinbekommen. Ich weiß nicht wie ich das mit AsyncTask schreiben muss.

    Er könnte natürlich das Packet mitschneiden. Aber es ist eben verschlüsselt. Sicher kann er das verschlüsselte Packet zu meinem Rechner senden und der reagiert dann auch darauf, aber von Grund auf weiß er ja garnicht erst was drin steht, weils eben verschlüsselt ist. Er weiß also auch nicht, dass da shutdown drin steht. Aber das mit dem Nachbar war auch nur ein Beispiel. Es sollen später mal sensible Daten über ein eigenes Protokoll gesendet werden. Diese sollte man aber eben nicht mal einfach mitsniffen und dann in Ruhe durchlesen können. Zwar kann man die Daten mitschneiden, aber bekommt den Inhalt nicht heraus. Nach dem Schlüsselaustausch verwendet TLS ja eine synchrone Verschlüsselung. Ich glaube AES müsste es sein. Er hat also lediglich nen ganzen Haufen verschlüsselte Packete, die ihm nichts bringen.

    Weil ich in C++ einen SSL Client geschrieben habe, der genau dieses simple Verfahren macht. Nur bekomm ich es auf Android nicht hin^^. Hier der Client Code (Server und Client basieren übrigens auf dem Beispiel den Beispielen von Boost (https://www.boost.org/doc/libs…mple/cpp03/ssl/client.cpp https://www.boost.org/doc/libs…mple/cpp03/ssl/server.cpp)



    Ich benutze auch das TCP Protokoll. (Steht auch in Zeile 23 vom Server und Zeile 122 im Client beim Resolver). Aber HTTP benutze ich nicht. Brauch ich auch nicht. Ich baue keinen Webserver.
    Mal ein ausgedachtes Szenario, wo so etwas Anwendung finden kann:



    Sagen wir mal ich möchte von meinem Smartphone ein Command zu meinem Rechner schicken. Zum Beispiel, dass er sich ausschalten soll. Dann schick ich einfach ein TCP Packet mit dem Inhalt "shutdown". Das ganze schicke ich übers WLAN an die lokale IP meines Rechners. Auf dem Rechner läuft der C++ Server. Der nimmt das Packet und liest "shutdown". Eine Abfrage innerhalb des Servers lautet jetzt "Wenn shutdown gesendet wird, dann fahre dich herunter".
    Allerdings nutzt auch mein Nachbar mein WLAN. Er könnte nun über eine "Man in the Middle" Attacke meinen Datenverkehr mitschneiden. Er sieht auch auch mein Shutdown Packet. Das geht ihn aber nichts an. Dafür verschlüssle ich die Daten zwischen Rechner(wo der Server drauf läuft) und Smartphone (wo der Client drauf läuft). SSL bietet eine Verschlüsselung zwischen Client und Server mit Schlüsselaustausch usw.. Also genau das richtige. Habe mich auch Schlau gemacht, in genau solchen Fällen greift man auch zu SSL. Ein offizielles Zertifikat brauche ich dafür nicht. Ich habe keinen Browser, der abgleicht ob der PublicKey jetzt ok ist oder nicht. Meine Schlüssel dienen ja nur mir und dem Projekt.


    Für diesen einfachen Fall brauch ich ja nun nicht stundenlang das HTTP Protokoll implementieren und mich damit auseinander setzen. Der Rechner reagiert nur auf den simplen Text "shutdown".


    Das war jetzt mal ein sehr gesponnenes Szenario. Aber Fakt ist, dass auch auf Android eine SSL Verbindung auf eigene Protokolle reagieren muss. Denn SSL an sich setzt kein Protokoll vorraus. Ich hoffe ihr könnt euch jetzt etwas mehr darunter vorstellen^^.

    Nein, die Verbindung funktioniert nicht ohne SSL. Der C++ Server funktioniert nur mit SSL. Das Zertifikat ist nicht offiziell zertifiziert. Ich versuche auch nicht per HTTP/HTTPS darauf zuzugreifen. Es gibt kein direktes Protokoll (außer halt IPv4 und TCP^^). Ich möchte nur eine Nachricht hinschicken und auch genau so zurück bekommen. Den C++ Code schreib ich gleich mal hier rein:



    Ich muss leider erstmal los. Melde mich heute Abend wieder :)

    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. :)