модифицировать okhttpclient с помощью CertificatePinner

Я использую Retrofit 2.0.0-beta3 с OkHttp 3.0.0-RC1 и сталкиваюсь с тривиальной проблемой ниже. Сервер HTTPS, к которому я подключаюсь, отлично работает, я использую вызов CertificatePinner и OkHttp, но не работает с вызовом Retrofit, хотя я устанавливаю тот же клиент в экземпляре Retrofit.

String hostname = "hostname";
CertificatePinner certificatePinner = new CertificatePinner.Builder()
        .add(hostname, "sha1/rNKiM/IsTzTMJ09jpMtPq4qP+Q8=")
        .add(hostname, "sha1/hL8+j9RH89wlAW7eNDSS1ZlZ8Z8=")
        .build();
OkHttpClient client = new OkHttpClient.Builder().certificatePinner(certificatePinner).build();

// This call works
OkHttpClient client = new OkHttpClient.Builder().certificatePinner(certificatePinner).build();
Request request = new Request.Builder()
    .url("https://" + hostname + "/api/me")
    .addHeader("Authorization", "Bearer token")
    .build();
okhttp3.Call call = client.newCall(request);
//execute call returns 200 with response

// This is not working and throwing SSL Connection Error
retrofit = new Retrofit.Builder()
        .baseUrl("https://" + hostname)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .client(client)
        .build();

person dhaval    schedule 31.03.2016    source источник
comment
Что значит не работает?   -  person Robert    schedule 31.03.2016
comment
@Robert, теперь это исправлено, я нашел ошибку в порядке выполнения. я поместил свой ответ ниже   -  person dhaval    schedule 31.03.2016


Ответы (1)


Это была ошибка в приложении, из-за которой клиент был создан до кода ниже:

ProviderInstaller.installIfNeeded(getApplication());

Порядок исправлен, и код работает нормально.

person dhaval    schedule 31.03.2016