Закрепление сертификата Square okHTTP - ошибка sslSocketFactory

Я пытаюсь импортировать свой собственный файл BKS, который содержит мой самоподписанный сертификат, но у меня возникают проблемы с okHTTP. Я хочу сделать это с файлом bks, у меня также получилось через файл sha512/.

Я получил этот код из нескольких руководств, и я знаю, что это проблема, но не могу ее исправить.

import android.content.Context;
import android.util.Log;

import java.io.InputStream;
import java.security.KeyStore;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Pinning
{
    Context context;
    public static String TRUST_STORE_PASSWORD = "your_secret";
    private static final String ENDPOINT = "https://api.yourdomain.com/";

public Pinning(Context c) {
    this.context = c;
}

private SSLSocketFactory getPinnedCertSslSocketFactory(Context context) {
    try {
        KeyStore trusted = KeyStore.getInstance("BKS");
        InputStream in = context.getResources().openRawResource(R.raw.mytruststore);
        trusted.load(in, "mypass".toCharArray());
        SSLContext sslContext = SSLContext.getInstance("TLS");
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
                TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trusted);
        sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
        return sslContext.getSocketFactory();
    } catch (Exception e) {
        Log.e("MyApp", e.getMessage(), e);
    }
    return null;
}


public void makeRequest() {
    try {
        OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context));

        Request request = new Request.Builder()
                .url(ENDPOINT)
                .build();

        Response response = client.newCall(request).execute();

        Log.d("MyApp", response.body().string());

    } catch (Exception e) {
        Log.e("MyApp", e.getMessage(), e);

    }
}
}

Теперь я получаю следующую ошибку в следующей строке:

OkHttpClient client = new OkHttpClient().sslSocketFactory(getPinnedCertSslSocketFactory(this.context)).;

ОШИБКА:

SSLSocketFactory в okHTTPClient нельзя применить к javax.net.SSLSocketFactory.

Если вы посмотрите на импорт, вы увидите следующие 3 из javax.

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

Итак, у меня есть несоответствие. Похоже, мне нужен okHTTP - sslSocketFactory с моим файлом bks. Но я не могу найти рабочего объяснения этому. Я также использую okHTTP 3.3.1

compile 'com.squareup.okhttp3:okhttp:3.3.1'

Я нашел это объяснение/решение здесь: Как я могу закрепить сертификат с Square OKHTTP?. Как упоминалось ранее. Я хочу использовать файл bks, а не метод sha512/.

Поэтому мне нужно знать, как разобрать этот javax.ssl.Factory на okHTTP-sslFactory или как создать okHTTPsslFactory с помощью генерируемого файла bks.

Кроме того, метод setSSSLSocketFactory больше недоступен в okHTTP 3.1.1.

Я очень ценю вашу помощь и спасибо, что нашли время, чтобы ответить на этот вопрос!


person user3325230    schedule 09.06.2016    source источник


Ответы (1)


Вместо этого вы должны использовать следующий синтаксис

OkHttpClient client = new OkHttpClient.Builder()
             .sslSocketFactory(getPinnedCertSslSocketFactory(this.context))
             .build();
person BNK    schedule 10.06.2016
comment
О человек спасибо! Я отсталый! Я забыл добавить .Builder(). Мне стыдно :/ - person user3325230; 11.06.2016