it-swarm.com.de

javax.net.ssl.SSLException: SSL-Handshake abgebrochen Verbindung wurde von Peer beim Aufruf des Webservice Android zurückgesetzt

Ich rufe https webservice an, und es funktioniert gut, aber jetzt, wenn ich versuche, es zu nennen, geben Sie mir folgende Fehler.

Protokollfehler:

12-23 06:28:11.969: W/System.err(3014): javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x1cc160: I/O error during system call, Connection reset by peer
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.Java:474)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.Java:750)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.Java:692)
12-23 06:28:11.979: W/System.err(3014):     at crittercism.Android.aa.getInputStream(Unknown Source)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.Java:93)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.Java:83)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.Java:170)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.Java:106)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.Java:129)
12-23 06:28:11.979: W/System.err(3014):     at org.Apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.Java:171)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.Java:164)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.Java:119)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:359)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:555)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:487)
12-23 06:28:11.989: W/System.err(3014):     at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:465)

Ich benutze folgenden Code zum Aufrufen von https Webservice.

public static void trustAllHosts() {

        X509TrustManager easyTrustManager = new X509TrustManager() {

            public void checkClientTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
                // Oh, I am easy!
            }

            public void checkServerTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
                // Oh, I am easy!
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }

        };

        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] { easyTrustManager };

        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("TLS");

            sc.init(null, trustAllCerts, new Java.security.SecureRandom());

            HttpsURLConnection
                    .setDefaultSSLSocketFactory(sc.getSocketFactory());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static HttpClient getNewHttpClient() {
        try {
            KeyStore trustStore = KeyStore.getInstance(KeyStore
                    .getDefaultType());
            trustStore.load(null, null);

            SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory
                    .getSocketFactory(), 80));
            registry.register(new Scheme("https", sf, 443));

            ClientConnectionManager ccm = new ThreadSafeClientConnManager(
                    params, registry);

            return new DefaultHttpClient(ccm, params);
        } catch (Exception e) {
            return new DefaultHttpClient();
        }
    }

MySSLSocketFactory.Java

public class MySSLSocketFactory extends SSLSocketFactory {
    SSLContext sslContext = SSLContext.getInstance("TLS");

    public MySSLSocketFactory(KeyStore truststore)
            throws NoSuchAlgorithmException, KeyManagementException,
            KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String Host, int port,
            boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, Host, port,
                autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }
}

Es funktioniert gut, aber jetzt scheitert es. Es werden keine Änderungen am Server vorgenommen. 

Ich habe schon erwähnt

  1. Android-Query - Zufällige SSLExceptions
  2. Intermittierende Verbindungsrücksetzung durch Peer-Fehler in Android beim Herstellen einer Verbindung mit dem Endpunkt .NET REST
  3. Android HTTPS-Ausnahme Verbindung von Peer zurückgesetzt
  4. Warum löst HttpUrlConnection während einer mobilen Datenverbindung eine SSLException aus?

Ich habe es sowohl in WLAN als auch in mobilen Daten getestet. Anwendung funktioniert nicht in beiden.

Falls jemand vor diesem Problem steht, helfen Sie mir bitte, es zu lösen.

16
DreamsNeverDie

Ich habe auch die gleiche Ausnahme. Ich fand heraus, dass es aufgrund des Protokolls TLS 1.0 vom Server nicht unterstützt wurde. 

Ich habe festgestellt, dass die Android-Verbindung mit der http-Verbindung zum Server fehlschlägt, auf dem TLS 1.0 nicht unterstützt wird. Ich suchte überall nach dem Fehler, fand aber nichts im Zusammenhang mit diesem Problem. Das Problem wurde behoben, als die TLS 1.0 protocol-Unterstützung zum Server hinzugefügt wurde. Sie können die Unterstützung des Server-/Hostnamenprotokolls mit https://www.ssllabs.com/ssltest überprüfen.

28
Ankit

Es kann zwei Gründe geben:

Zertifikate können auf Client- oder Server-Seite abgelaufen sein.

Lösung: Verfallsdatum des vorhandenen Zertifikats verlängern oder neue Zertifikate austauschen.

Der Serverport wurde auf einen anderen Port zurückgesetzt. 

Lösung: Dieses Portänderungsproblem ist normalerweise auf Grund von Serverwartung oder Patch-Update aufgetreten. Manchmal wird der Port des Dienstes geändert. Bitten Sie die Person, die Ihnen das WSDL zur Verfügung gestellt hat, um WSDL auf ihrem Server neu zu generieren, und prüfen Sie, ob der Port mit dem vorhandenen WSDL auf Clientseite übereinstimmt oder nicht. Am wahrscheinlichsten wäre dies hier der Fall.

3
kingAm

Wir hatten das gleiche Problem heute Morgen und haben es gelöst.

SSL an IIS 8

  1. Gestern und gestern Abend hat alles gut funktioniert. Unser SSL wurde auf der IIS Site aktualisiert.
  2. Beim Auschecken der Site-Bindungen an das SSL haben wir festgestellt, dass IIS8 ein neues Ankreuzfeld "Anzeige des Servernamens erforderlich" enthält. Dieses Kontrollkästchen wurde nicht aktiviert, sodass wir es aktivieren konnten.
  3. Das hat das Problem ausgelöst.
  4. Ging zurück zu IIS, deaktivierte die Checkbox .... Problem gelöst!
2
Jorge Navarro

Ich hatte das gleiche Problem mit einigen Android-Geräten. Die Lösung wurde durch IIS Servereinstellungen gefunden.

Schritte:

  1. Öffnen Sie IIS
  2. Wählen Sie die Site aus, an der Sie arbeiten
  3. Site-Bindung bearbeiten
  4. Deaktivieren Sie die Identifizierung des erforderlichen Servernamens.
  5. OK klicken

Referenz-Screenshot:

 enter image description here

Hoffe das würde dir helfen.

1
Hiren Patel