Ist diese android SSL-Pinning-Implementierung korrekt und warum wird dieser Fehler im Logcat angezeigt?

Ich erhalte diesen Fehler in meinem Logcat. Ich habe SSL-Pinning in meiner Android-Anwendung implementiert. Ich glaube, ich habe etwas falsch gemacht, was diesen Fehler verursacht.

05-19 17:39:54.998: E/NativeCrypto(30908): ssl=0x5eefaf80 cert_verify_callback x509_store_ctx=0x5dbea940 arg=0x0

05-19 17:39:54.998: E/NativeCrypto(30908): ssl=0x5eefaf80 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA

Following ist mein SSL-Pinning-Android-Code. Das klappt aber wirft den oben genannten Fehler.

public static HttpClient getHttpClient(HttpParams params, Context context) throws CertificateException, KeyStoreException, NoSuchAlgorithmException, IOException, KeyManagementException, UnrecoverableKeyException {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream caInput = context.getResources().openRawResource(R.raw.abc);
        Certificate ca;
        try {
            ca = cf.generateCertificate(caInput);
        } finally {
            try {
                caInput.close();
            } catch (IOException e) {
                Log.e("Error","Closing the cert file",e);
            }
        }

        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);

        SSLSocketFactory sf = new TrustSelectCertsSSLSocketFactory(keyStore,context);
        sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
        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);

        DefaultHttpClient client = new DefaultHttpClient(ccm, params);
        DefaultHttpRequestRetryHandler defaultHttpRequestRetryHandler = new DefaultHttpRequestRetryHandler(0, false);
        client.setHttpRequestRetryHandler(defaultHttpRequestRetryHandler);
        return client;
}

InvoiceelectCertSSLFactory.java code

public class TrustSelectCertSSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public TrustSelectCertSSLFactory(KeyStore truststore, Context context) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException,
        UnrecoverableKeyException, CertificateException {
    super(truststore);
    String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
    tmf.init(truststore);
    sslContext.init(null, tmf.getTrustManagers(), 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();
}

}

Der Code, der die Funktion getHttpClient @ aufru

....
HttpClient client = getHttpClient(params,context);
....
httpResponse = client.execute(post);
....

Ist meine SSL-Pinning-Implementierung korrekt und warum wird dieser Fehler im Logcat angezeigt? Wenn Sie weitere Informationen benötigen, geben Sie diese bitte im Kommentarbereich an.

Ich habe auf Google gesucht, aber es gibt mir Lösungen, die keine Lösung für dieses Problem sind. Gibt es noch etwas, wonach ich suchen sollte?

link 1

link 2

Antworten auf die Frage(0)

Ihre Antwort auf die Frage