Ошибка соединения SSL при установлении соединения - PullRequest
0 голосов
/ 17 октября 2018

Я совершенно новичок в этом и после некоторых исследований пытаюсь установить соединение SSL / TLS с сервером, чтобы разрешить вызов SOAP за пределы определенной сети.Я использую библиотеку OKHttp3, чтобы сделать вызов, и делюсь файлом .P12 с закрытым ключом и настраиваю фабрику сокетов SSL, как показано ниже

setupKeyCert(context);    
 final OkHttpClient client = new OkHttpClient();
    client.newBuilder()
            .connectTimeout(30, TimeUnit.SECONDS)
            .sslSocketFactory(sslContext.getSocketFactory(), mainX509TrustManager);

, и устанавливаю keystone и Trust Manager в

setupKeyCert ()

как

try {
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            KeyManagerFactory keyManagerFactory = null;
            if(buildEnvironment == "prod")
            {
                keyStore.load(context.getAssets().open(Constants.CERT_PROD_FILE), password);

                keyManagerFactory = KeyManagerFactory.getInstance("X509");
                keyManagerFactory.init(keyStore, Constants.CERT_PROD_VALUE.toCharArray());

            } else
            {
                keyStore.load(context.getAssets().open(Constants.CERT_FILE), Constants.CERT_VALUE.toCharArray());
                keyManagerFactory = KeyManagerFactory.getInstance("X509");
                keyManagerFactory.init(keyStore, Constants.CERT_VALUE.toCharArray());
            }
            KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();

            //Adding TrustManagerFactory
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                throw new IllegalStateException("Unexpected default trust managers:"
                        + Arrays.toString(trustManagers));
            }
            mainX509TrustManager = (X509TrustManager) trustManagers[0];


            sslContext = SSLContext.getInstance("TLSv1.2");
            sslContext.init(keyManagers, null, null);
        } catch (FileNotFoundException f)
        {
            Log.e("Excption File", String.valueOf(f));
        } catch (Exception i)
        {
            Log.e(TAG, "Exception", i);
        }

Где Constant.CERT_PROD_FILE относится к константной строке, содержащей имя файла.При отладке или выполнении вызова я получаю сообщение об ошибке ниже

javax.net.ssl.SSLProtocolException: SSL рукопожатие прекращено: ssl = 0x8a163cc0: сбой в библиотеке SSL, обычно ошибка протокола: 10000410: SSLподпрограммы: OPENSSL_internal: SSLV3_ALERT_HANDSHAKE_FAILURE (external / boringssl / src / ssl / s3_pkt.c: 610 0x9f7e3d00: 0x00000001)

Я не уверен, что мне не хватает, в том числе и пробовал другое решениеAndroid 7 проблема, но она все еще не работает.Я попытался отладить и вижу только вышеуказанную ошибку, поэтому не уверен, что проблема с сервером или клиентом.Заранее спасибо за помощь.

...