5

Ich versuche meine eigene BKS-Datei zu importieren, die mein selbstsigniertes Zertifikat enthält, aber ich bekomme Probleme mit okHTTP. Ich möchte dies mit der bks-Datei machen, ich habe es auch über den sha512/funktioniert.Square okHTTP Zertifikat pinning - sslSocketFactory Fehler

Ich habe diesen Code aus mehreren Tutorials und ich weiß, da ist das Problem, aber kann es nicht beheben.

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); 

    } 
} 
} 

Jetzt bekomme ich die folgende Fehlermeldung in der folgenden Zeile:

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

ERROR:

SSLSocketFactory in okHTTPClient cannt auf javax.net.SSLSocketFactory angewendet werden.

Wenn Sie innerhalb der Importe sehen Sie die folgenden 3 von javax.

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

Also habe ich ein Missmatch. Scheint so, als ob ich eine okHTTP - sslSocketFactory mit meiner bks Datei benötige. Aber dazu kann ich keine funktionierende Erklärung finden. Ich verwende auch okHTTP 3.3.1

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

Ich fand diese Erklärung/Lösung hier: How can I pin a certificate with Square OKHTTP?. Wie schon erwähnt. Ich möchte die bks-Datei verwenden, nicht die sha512/Methode.

Daher muss ich wissen, wie Sie diese javax.ssl.Factory in die okHTTP-sslFactory analysieren oder eine okHTTPsslFactory mit der generate bks-Datei erstellen.

Desweiteren ist die Methode setSSLSocketFactory in okHTTP 3.1.1 nicht mehr verfügbar.

Ich schätze Ihre Hilfe sehr und danke, dass Sie sich die Zeit genommen haben, diese Frage zu lösen!

Antwort

0

sollten Sie die folgende Syntax anstelle

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

Hoffe, es hilft!

+1

Oh man danke! Ich bin verspätet! Ich habe vergessen, den .Builder() hinzuzufügen. Schande über mich :/ – user3325230

Verwandte Themen