Https-Login

  • Hallo erst mal an euch :)
    Mein Name ist Patric und ich bin noch recht neu in der Welt der Android-Programmierung, habe da jedoch gleich eine Frage
    an euch.
    Ich habe mich schon schon durch die Ergebnisse der Suchfunktion gelesen, jedoch leider nichts passendes gefunden.
    Und zwar möchte ich mich per https mit Benutzername und Passwort auf einer Seite einloggen um dahinter Daten zu parsen.
    Jedoch habe ich keine Ahung wie ich das mit dem Login realisieren kann. Ich habe schon auf unzähligen Seiten etwas darüber gelesen,
    dass ich zum Beispiel einen neuen Keystore erstellen muss oder ähnliches. Aber ich habe da die Übersicht verloren, was denn jetzt
    der einfachste und effizienteste Weg dafür wäre?!
    Hoffe ihr könnt mir weiterhelfen


    Gruß Pat

  • Die Frage ist tatsächlich, wie genau dieses Benutzerwort/Passwort implementiert ist.
    Als Login Maske einer Seite kannst du den von killphil75 vorgeschlagenen Weg nutzen.
    Wenn es sich aber um eine Login-Seite des HTTP Servers handelt wird das ganze sicherlich etwas komplizierter.
    Du müsstest dann irgendwie den Nutzernamen in die URL pappen und die Kennwortabfrage abhandeln. Wie genau das funktioniert weiß ich allerdings auch nicht.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Wenn ich den ganz normal in meinem Browser aufm Rechner aufrufe komme ich auf die Seite dahinter, wenn ich den in mit einem Webview aufrufe, bekomme ich schon mal die Meldung das ein Zertifikat unbekannt ist und ich erst diesem trauen muss.
    Ich habe jetzt bisschen was darüber gelesen, das ich dazu nen HTTPS Post machen muss und die Daten vorher ins UTF8 Format bringen muss, aber wie das ganz genau abläuft weiß ich nicht :-!

  • Also dein Aufruf oben ist ein Seitenaufruf mit GET Parametern,


    also einfach mal bei Google HTTP GET android Googeln, da findest du 100 Codebeispiele. Response ist dann die aufgerufene Seite als String, welche du Parsen kannst.



    Falls du dir keinen Parser selber bauen magst, empfehle ich Dir mal ein Auge auf HTMLCleaner bzw JSoup zu werfen, das hilft mir immer ungemein.

  • Huch ,
    vorhin hattest du einen Link gepostet wo an der URL Parameter dranhingen ala


    ?passwort=xxx&user=xxx&blahblup,


    dann ist es ein GET Request,
    jetzt steht da nur noch der normale Link da.
    Und da hast du natürlich recht das Formular versendet seine Daten per "post", also musst du deinen Request auch per Post absetzen.



  • LogCat ???


    Wenn es der Network on Mainthread error ist, musst du wissen das seit Android 3 alle Netzwerkthreads (bzw generell Sachen welche den MainThread / UI Thread ausbremsen in einen eigenen Thread gekapselt werden müssen -> Android Policies


    -> faule Lösung: -> strict Modus ausschalten (nur zum Testen empfehlenswert)


    -> einfache saubere Lösung -> Netzwerk gedöns in einen AsyncTask packen und aufrufen

  • Entweder die NetworkOnMainThreadException oder eine CertificateException (bin mir nicht sicher ob die so heißt). Ich vermute eher letzteres, da das Zertifikat nicht akzeptiert wurde (glaube die Meldung hieß auch so ähnlich: "Certificate not trusted"). Hab mich auch mal eine Weile damit beschäftigt, ist aber schon länger her. Wenn es das wirklich ist, kann ich meine Lösung dazu hier mal reinstellen.


    Achja, bei mir wird auch ein neuer KeyStore erstellt, wie im ersten Post schon angemerkt.


    block_

  • Es kann sein, dass ich hier jetzt bisschen was falsches dazu erzähle, aber es war auch schon, wie gesagt, lange her, dass ich das gemacht habe :P
    Also, da der DefaultHTTPClient nicht mit HTTPS umgehen konnte, hab ich eine neue Klasse erstellt, die von DefaultHTTPClient ableitet und so implementiert, dass dieser auch mit HTTPS klar kommt.


    SecureHTTPClient:


    In der newSslSocketFactory() wird dann der KeyStore geladen, welches von der KeyStoreHandler Klasse gemacht wird.
    KeyStoreHandler:


    Die Konstanten oben musst du dann jeweils noch anpassen.
    KEYSTORE_FILE_NAME ist einfach nur der Name der KeyStore Datei (was der name ja auch schon sagt :P). Ist eigentlich egal wie du die Datei nennst.
    KEYSTORE_PASSWORD ist für das Passwort für den KeyStore, da ein KeyStore ja immer mit Passwort gesichert sein muss.
    CERTIFICATE_ALIAS bin ich mir nicht ganz sicher, aber das steht beim Zertifikat immer dabei. Müsste der einfach Allgemeine Name (CN) sein.
    CERTIFICATE_URL ist die genaue Adresse zum Zertifikat auf dem Server. Das ist wichtig, da ja das Zertifikat runtergeladen und in den KeyStore gespeichert wird. (Frag mich jetzt nicht, wie ich an die Adresse gekommen bin, da müsste ich auch nochmal nachgucken :P)


    Näher gehe ich jetzt mal nicht auf den Code ein, dazu müsste ich mir auch kurz Zeit nehmen, aber das kriegst du bestimmt auch selber hin den zu verstehen. Viel Hokus-Pokus ist das nicht.


    Und so wird das Ganze dann benutzt:


    Ich hoffe ich hab nichts vergessen. Es ist vielleicht nicht optimal gelöst (siehe Exception-Handling usw.) und es ist auch nicht die einzige Lösung, aber sie hat funktioniert und das war die Hauptsache.


    block_

  • Wow Wow Wow :-O
    Ach du meine Güte, also auf so eine Lösung wär ich im Leben nicht gekommen!
    Ich versuch mich da mal durchzulesen^^
    Gut die einzigste Frage die sich mir beim schnell drüberlesen stellt, ist wie du an die URL des Zertifiaktes gekommen bist?! :)

  • Ich hab doch gesagt, du sollst nicht fragen :D
    Also wenn du auf der Seite bist und dir das Zertifikat ansiehst, dann bei Details ist im mittleren Bereich das Zertifikats-Layout. Da unter dem Punkt Erweiterungen->Zertifizierungsstellen-Informations-Zugriff steht eine URI. Die hab ich wohl bei mir genommen (endet bei mir mit cacert.crt). Das hat soweit funktioniert. (Hab das ganze mit Firefox angeguckt, bei anderen Browsern ist eventuell eine andere Ansicht)


    block_

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!