Erstellen Sie SSL-Socket auf Android mit selbst signiertem Zertifikat

Ich versuche, eine Android-App mit einem SSL-fähigen Server zu verbinden, der ein selbst signiertes Zertifikat verwendet. Ich habe bereits Dutzende von Tutorials gelesen und die App akzeptiert jetzt das Zertifikat und die Verbindung zum Server, aber ich bekomme niemals irgendwelche Daten zurück.

Der ursprüngliche Code, den ich zur Initialisierung der Steckdose verwendet habe, ist:

  • Android ViewPager's onPageScrollStateChanged wird niemals angerufen
  • Volle Breite Navigation Schublade
  • Wie kann ich einen Toast für eine bestimmte Dauer zeigen?
  • Fehler beim Öffnen der HPROF-Datei
  • AktionMode über Symbolleiste anzeigen
  • Gibt es eine gute Website für die Verfolgung Ihrer Rangliste auf Android Market?
  • //passphrase for keystore char[] keystorePass="password".toCharArray(); //load own keystore (MyApp just holds reference to application context) KeyStore keyStore=KeyStore.getInstance("BKS"); keyStore.load(MyApp.getStaticApplicationContext().getResources().openRawResource(R.raw.keystore),keystorePass); //create a factory TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); //get context SSLContext sslContext=SSLContext.getInstance("TLS"); //init context sslContext.init( null, trustManagerFactory.getTrustManagers(), new SecureRandom() ); //create the socket Socket socket=sslContext.getSocketFactory().createSocket("hostname",443); socket.setKeepAlive(true); 

    Danach verwendet die Laufschleife des Receiver-Threads socket.getInputStream (), um auf den Eingangsstrom zuzugreifen. Solange ich eine unverschlüsselte Verbindung verwende, funktioniert das problemlos. Aber die sichere Verbindung ruft keine Daten aus dem Socket ab. Ich habe dies durch Hinzufügen von Log-Nachrichten an die Empfangsschleife und sogar verwendet OpenSSL s_server zu überprüfen. Ich habe Daten vom Client abgerufen, aber der Kunde hat nie etwas empfangen, das ich dazu geschickt habe.

    Als letzter Test habe ich versucht, eine Verbindung zu www.google.com:443 wie folgt zu öffnen:

     javax.net.SocketFactory fact=SSLSocketFactory.getDefault(); Socket socket=fact.createSocket(_config.getUri().getHost(), _config.getUri().getPort()); 

    Immer noch das gleiche Ergebnis, Verbindung funktioniert aber mit dem InputStream Ich bekomme nichts vom Server.

    Jemand hat irgendwelche Ideen?

    BEARBEITEN:

    Ich bin derzeit nicht erlaubt, meine eigene Frage zu beantworten, aber hier ist die Antwort: Nun, stellt sich das Problem WAS die Empfangsschleife. Ich verließ mich auf InputStream.available() , um die Anzahl der Bytes zu lesen, aber wusste nicht, dass es eher unzuverlässig war (gibt immer 0 für SSL-Sockel). Also habe ich die Empfangsschleife umgeschaltet, um das Blocking read() verwenden.

  • Wie kann ich einen Schatten zur unteren Blattansicht hinzufügen?
  • Wie funktioniert Google Analytics für Android mit der Offline-App-Nutzung?
  • Spiel lokales Video im Webview
  • Android: Wie bekomme ich genaue Höhe?
  • Deaktivieren Sie den Hamburger auf die Pfeilanimation auf der Symbolleiste
  • ListView mit CHOICE_MODE_MULTIPLE mit CheckedText in einer benutzerdefinierten Ansicht
  • One Solution collect form web for “Erstellen Sie SSL-Socket auf Android mit selbst signiertem Zertifikat”

    Wie oben erwähnt: stellt das Problem WAS die Empfangsschleife dar. Ich verließ mich auf InputStream.available() , um die Anzahl der Bytes zu lesen, aber wusste nicht, dass es eher unzuverlässig war (gibt immer 0 für SSL-Sockel). Also habe ich die Empfangsschleife umgeschaltet, um das Blocking read() verwenden.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.