1. klausa2, 13.11.2010 #1
    klausa2

    klausa2 Threadstarter Fortgeschrittenes Mitglied

    Hallo,

    mein Problem: ich möchte mittels HttpClient und POST per https, also mit SSL, auf einen Server zugreigen, der ein selbst igniertes Certificate verwendet. Der HttpClient wirft da immer eine SSLException

    javax.net.ssl.SSLException: Not trusted server certificate

    Nun habe ich im Web gesucht und folgenden Code gefunden, der sich nur mit
    "import org.apache.http.conn.ssl.SSLSocketFactory"
    aber nicht mit
    "import javax.net.ssl.SSLSocketFactory"
    compilieren lässt, da in javax die methode "getHostnameVerifier() " nicht vorhanden ist.:

    Code:
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] DefaultHttpClient getTolerantClient() { [/SIZE]
    [SIZE=2]DefaultHttpClient client = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] DefaultHttpClient(); [/SIZE]
    [SIZE=2]SSLSocketFactory sslSocketFactory = (SSLSocketFactory) client [/SIZE]
    [SIZE=2].getConnectionManager().getSchemeRegistry().getScheme([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"https"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) [/SIZE]
    [SIZE=2].getSocketFactory(); [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] X509HostnameVerifier delegate = sslSocketFactory.getHostnameVerifier(); [/SIZE]
    [SIZE=2]AbstractVerifier av = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] AbstractVerifier() { [/SIZE][/LEFT]
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] verify(String host, String[] cns, String[] subjectAlts) [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]throws[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] SSLException { [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]boolean[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ok = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]true[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2];  //  true is default in this case[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] { [/SIZE]
    [SIZE=2]delegate.verify(host, cns, subjectAlts); [/SIZE]
    [SIZE=2]} [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (SSLException e) { [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (String cn : cns) { [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (cn.startsWith([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"*."[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])) { [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] { [/SIZE]
    [SIZE=2]delegate.verify(host, [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] String[] { cn.substring(2) }, subjectAlts); [/SIZE]
    [SIZE=2]ok = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]true[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]; [/SIZE]
    [SIZE=2]} [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Exception e1) { } [/SIZE]
    [SIZE=2]} [/SIZE]
    [SIZE=2]} [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](!ok) [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]throw[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] e; [/SIZE]
    [SIZE=2]} [/SIZE]
    [SIZE=2]} [/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// end verify [/COLOR][/SIZE][/COLOR][/SIZE][/LEFT]
     
    [SIZE=2]}; [/SIZE]
    [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]// end [U]abstractverifier[/U][/COLOR][/SIZE][/COLOR][/SIZE][/LEFT]
     
    
    [LEFT][SIZE=2]sslSocketFactory.setHostnameVerifier(av); [/SIZE]
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]return[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] [U]client[/U]; [/SIZE]
    [SIZE=2]} [/SIZE][/LEFT]
    [/LEFT]
    
    
    Klappt auf dem Desktop prima, aber unter Anfroid nicht. Ein Breakpunt am Anfang von verify wird nie erreicht.​

    Frage 1: Hat jemand ne Idee, warum das nicht läuft?
    Frage 2, wichtiger: Wie kann ich meinen HttpClient dazu bringen, selbst signierte Zertificate zu akzeptieren?? Oder wie kann ich als root user dem System keystore das Zertifikat zufügen (wäre mir weniger angenehm, da es dann für alle Apps gelten würde).​
     
  2. klausa2, 16.11.2010 #2
    klausa2

    klausa2 Threadstarter Fortgeschrittenes Mitglied

    Scheint ja nicht viele Leute zu interessieren.

    Hier ist eine Lösung, die bei mir funktioniert:
    crazybob.org
     
    truetigger gefällt das.
  3. truetigger, 18.11.2010 #3
    truetigger

    truetigger Neuer Benutzer

    Mich interessiert es schon - aber meine Gehversuche in Android sind noch viel zu neu, als dass ich über solch ein Problem gestolpert wär.

    Spätestens jedoch bei Business-Applications wird die Frage aufkommen, wie man eigene Zertifizierungsinstanzen einpflegen kann, wie man für Tests mit Zertifikaten arbeiten kann, die das Handy nicht von offizieller Seite bestätigt bekommt - und dann werd ich froh sein, dass hier ein paar Infos darüber zu finden sind.

    Merci!
     
Die Seite wird geladen...
Similar Threads Forum Datum
Update 'cm-crackling-8e22004a15-to-93b9ab5039-signed‘ Wileyfox Swift Forum 16.08.2016
Nokia wirft die Marketing-Maschinerie an [Marktgeschehen] Android News 01.12.2016
Talk 9x löscht ständig Micro SD oder wirft aus Cube Talk9x U65GT Forum 07.02.2017

Users found this page by searching for:

  1. Unbekannter Netzwerkfehler self signed certificate