Я совершенно новичок в этом и после некоторых исследований пытаюсь установить соединение 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 проблема, но она все еще не работает.Я попытался отладить и вижу только вышеуказанную ошибку, поэтому не уверен, что проблема с сервером или клиентом.Заранее спасибо за помощь.