Android HttpsUrlConnection javax.net.ssl.SSLException La conexión se cerró por un error de reconocimiento entre pares cuando se utiliza el almacén de confianza local

Estoy teniendo problemas para conseguir que Android se conecte a un simpleOpenSSL servidor usando elHttpsUrlConnection Objeto (he revisado StackOverflow y un montón de tutoriales en línea, y he seguido los ejemplos prácticamente línea por línea y todavía no puedo entender por qué el mío está roto cuando uso mi almacén de confianza local).

Actualmente tengo una actividad de Android que intenta conectarse a un simpleOpenSSL server (Puedo conectarme a mi servidor usando un cliente OpenSSL), una vez queHttpsUrlConnection.connect() se llama Recibo un "javax.net.ssl.SSLException: Connection closed by peer" error during the SSL handshake. ¿Quizás estoy configurando mi servidor de muestra incorrectamente?

Cosas a tener en cuenta:

No hay autorización del cliente en este momento.puedo conectarme ahttps://www.google.com al cargar el almacén de confianza predeterminadoNo puedo conectarme al servidor en localhost con un certificado autofirmadoNo quiero confiar en todos los certificados.No quiero usar Apache HttpClientdesea utilizar el almacén de confianza local solamentecreado local de confianza con castillo hinchablesoy capaz de cargar correctamente el almacén de confianza endetrás de un firewall proxy, el proxy está configurado en mi dispositivo virtual AndroidAVD establecido enAndroid 4.1 API 16.

Cosas que ya he probado:

conectando a ambos127.0.0.1 and 10.0.2.2usando un nuevoSecureRandom() with the SSLContext.init()creando la URL con'URL u = new URL("https", "10.0.2.2", 443, "/");'utilizandoTrustManagerFactory.getDefaultAlgorithms() en lugar de la "X509"da"Unexpected response code error 503" en lugar de "conexión cerrada por par"

¡Gracias de antemano por tomarse el tiempo para revisar mi pregunta!

El servidor simple comenzó con el comando:

$ sudo openssl s_server -accept 443 -cert server-cert.pem -key server-key.pem -pass file:passphrase.txt -state -www -verify 0

Conexión de cliente probada con comando:

$ openssl s_client -connect 127.0.0.1:443 

Código de actividad de Android (editado para eliminar el código completo de ejecución para simplificar; por favor, avíseme si se necesita más código): la salida de error está debajo del código.

    try {
        TrustManagerFactory tmf;

        // local trust store
        tmf = TrustManagerFactory.getInstance("X509");
        tmf.init(loadLocalKeyStore(getApplicationContext()));

        // default trust store - works for https://www.google.com
        // tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        // tmf.init((KeyStore) null);

        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, tmf.getTrustManagers(), null);

        HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.STRICT_HOSTNAME_VERIFIER;
        URL u = new URL("https://10.0.2.2");

        HttpsURLConnection urlConnection = (HttpsURLConnection) u.openConnection();

        urlConnection.setSSLSocketFactory(context.getSocketFactory());
        urlConnection.setHostnameVerifier(hostnameVerifier);
        urlConnection.connect();

        System.out.println("Response Code: " + urlConnection.getResponseCode());
        System.out.println("Response Code: " + urlConnection.getCipherSuite());
    } 

    ...

    private KeyStore loadLocalKeyStore(Context context) {
        InputStream in = context.getResources().openRawResource(R.raw.newserverkeystore);
        KeyStore trusted = null;
        try {
           trusted = KeyStore.getInstance("BKS");
           trusted.load(in, "thisisasecret".toCharArray());
        } finally {
           in.close();
        }
       return trusted;
    }

Salida al conectar correctamente ahttps://www.google.com:

09-09 21:58:09.947: I/System.out(669): Response Code: 200
09-09 21:58:09.947: I/System.out(669): Response Code: TLS_ECDHE_RSA_WITH_RC4_128_SHA

Salida al intentar conectarse a mi servidor con un certificado autofirmado:

09-09 22:03:23.377: D/HttpsProxy(717): Https Request error
09-09 22:03:23.377: D/HttpsProxy(717): javax.net.ssl.SSLException: Connection closed by peer
09-09 22:03:23.377: D/HttpsProxy(717):  at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
09-09 22:03:23.377: D/HttpsProxy(717):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:442)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
09-09 22:03:23.377: D/HttpsProxy(717):  at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
09-09 22:03:23.377: D/HttpsProxy(717):  at com.example.myfirstapp.HttpsUrlConnectionActivity$3.doInBackground(HttpsUrlConnectionActivity.java:257)
09-09 22:03:23.377: D/HttpsProxy(717):  at com.example.myfirstapp.HttpsUrlConnectionActivity$3.doInBackground(HttpsUrlConnectionActivity.java:1)
09-09 22:03:23.377: D/HttpsProxy(717):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-09 22:03:23.377: D/HttpsProxy(717):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-09 22:03:23.377: D/HttpsProxy(717):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-09 22:03:23.377: D/HttpsProxy(717):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-09 22:03:23.377: D/HttpsProxy(717):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-09 22:03:23.377: D/HttpsProxy(717):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-09 22:03:23.377: D/HttpsProxy(717):  at java.lang.Thread.run(Thread.java:856)

¡¡Gracias de nuevo!!