Retrofit2 и закрепление сертификата

В моем приложении для Android я хочу использовать привязку сертификата при общении с сервером. Я видел этот код, который использует keystore, который хранится в папке raw.

OkClient client = new RetrofitClientBuilder()
.pinCertificates(getResources(), R.raw.keystore, STORE_PASS)
.build()

Я использую retrofit2 и OkHTTP3 и только что видел этот пример:

 OkHttpClient client = new OkHttpClient.Builder()
    .certificatePinner(new CertificatePinner.Builder()
            .add("publicobject.com", "sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=")
            .add("publicobject.com", "sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=")
            .add("publicobject.com", "sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=")
            .add("publicobject.com", "sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=")
            .build())
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://api.nuuneoi.com/base/")
    .addConverterFactory(GsonConverterFactory.create())
    .client(client)
    .build();

Достигает ли этот более поздний подход того же результата, что и первый?


person Favolas    schedule 24.05.2016    source источник


Ответы (2)


Могу сказать, что этот подход отлично сработал для меня. Просто убедитесь, что вы правильно добавили свою конечную точку без «https://» в пиннер сертификата, и все должно работать нормально.

person TalMihr    schedule 29.03.2017

Вам нужно изменить sha1/ на sha256/ , у меня это хорошо работает.

person chatam    schedule 30.09.2020