Android pre-lollipop-Geräte gibt Fehler "SSL handshake aborted: ssl=0x618d9c18: I/O error during system call, Connection reset by peer"

Iam mit diesem seltsamen Problem, in dem die Nachrüstung hält, warf mich

"SSL handshake aborted: ssl=0x618d9c18: I/O error during system call,
Connection reset by peer"

in kitkat, in der Erwägung, dass der gleiche code ist in Ordnung, die in lollipop-Geräte. Iam mit einem OkHttpClient client wie folgt

public OkHttpClient getUnsafeOkHttpClient() {
    try {
        final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) {
            }
            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) {
            }
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[0];
            }
        } };

        int cacheSize = 10 * 1024 * 1024; //10 MB
        Cache cache = new Cache(getCacheDir(), cacheSize);
        final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, trustAllCerts,
                new java.security.SecureRandom());
        final SSLSocketFactory sslSocketFactory = sslContext
                .getSocketFactory();
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient = okHttpClient.newBuilder()
                .cache(cache)
                .sslSocketFactory(sslSocketFactory)
                .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build();
        return okHttpClient;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

}

Iam mit diesem Kunden in der Nachrüstung wie in diesem

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(URL)
            .client(getUnsafeOkHttpClient())
            .addConverterFactory(GsonConverterFactory.create())
            .build();

BEARBEITEN : hinzufügen der getUnsafeOkHttpClient() hat keine Wirkung und es ist überhaupt nicht empfohlen, zu umgehen, um den ssl-check mit getUnsafeOkHttpClient()

Zur info : Das Problem war, weil der api-Endpunkt unterstützt nur TLS 1.2 wurde deaktiviert standardmäßig auf android-Geräten 16<device<20 . Also für 16<device<20, erstellen Sie eine benutzerdefinierte SSLSocketFactory

Haben Sie verwenden, um TLSv1.2? Was ist, wenn Sie die Standardeinstellung verwenden?
es gibt keinen Effekt, wenn ich die ssl-Instanz, so dass ich entfernt und die gesamte unsichere Kunde von retrofit, noch funktioniert es nur auf lollipop und nicht auf kitkat
Alles, was auf deinem server? Vielleicht kannst du einige logs von deinem server?
infact, die eine Kostenlose api von der api.Daten.reg.und ich dont haben Zugriff auf server-logs
möglich server-Seite-Problem?

InformationsquelleAutor Navneet Krishna | 2017-08-31

Schreibe einen Kommentar