16
Июн
2017

Как подключится к серверу с предоставлением клиентского сертификата?

Есть сервер(testLink вида: www.example.com:88/api/ping), к которому нужно подключиться через протокол SSL. Так же в наличии есть два ключа client.crt(открытый) и client_unpass.key(приватный), то есть как я понимаю используется асимметричное шифрование. Сертификат самоподписанный. Через curl успешно подключаюсь к серверу с помощью команды

curl -k --key client_unpass.key --cert client.crt --url "testLink"

Как мне подключиться к нему через Android приложение желательно через OkHttp 3-й версии? Пробовал различные варианты которые находил и получал различные ошибки, например:

SSLHandshakeException

Которые не смог решить.

Дополнительная информация о сервере, полученная с сайта https://www.digicert.com/help/:

SSL certificate

Key Length = 1024 Signature algorithm = SHA256 + RSA (excellent) Secure Renegotiation: Supported

SSL Certificate has not been revoked The certificate expires May 29, 2047 (10939 days from today) Certificate does not match name SSL Certificate is not trusted

Например ошибку указанную выше, выдает пример с habr, вот как он уменя выглядит:

private void test1() throws Exception {
    String password = "XXXXXX";

    KeyStore keystore = KeyStore.getInstance("PKCS12");

    keystore.load(getResources().openRawResource(R.raw.pfx), password.toCharArray());

    SSLSocketFactory sslSocketFactory = new AdditionalKeyStoresSSLSocketFactory(keystore);

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, "UTF-8");
    HttpProtocolParams.setUseExpectContinue(params, true);

    final SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("https", sslSocketFactory, 88));

    ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
    DefaultHttpClient httpclient = new DefaultHttpClient(manager, params);

    HttpGet httpPostRequest = new HttpGet(testLink);

    HttpResponse response = httpclient.execute(httpPostRequest);
    String result = EntityUtils.toString(response.getEntity());
    Log.e("test", "result = " + result);
}

Источник: https://ru.stackoverflow.com/questions/679907/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%81%D1%8F-%D0%BA-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83-%D1%81-%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%B0

Тебе может это понравится...

Добавить комментарий