5

자체 서명 된 인증서가 포함 된 자체 BKS 파일을 가져 오려고하는데 okHTTP에 문제가 있습니다. 나는 bks 파일을 가지고 이것을하고 싶다, 나는 또한 sha512 /를 통해 작동하도록했다.스퀘어 okHTTP 인증서 고정 - sslSocketFactory 오류

나는이 튜토리얼에서이 코드를 얻었는데 거기에 문제가 있다는 것을 알고 있지만 문제는 해결할 수 없다.

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

ERROR : okHTTPClient에서

의 SSLSocketFactory는 javax.net.SSLSocketFactory에 적용 할 cannt.

수입을 살펴보면 javax에서 다음 3 개를 볼 수 있습니다.

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

그래서 나는 missmatch를 얻었다. 내 bks 파일과 함께 okHTTP - sslSocketFactory가 필요한 것처럼 보입니다. 그러나 나는 그것에 대해 작동하는 설명을 찾을 수 없다. How can I pin a certificate with Square OKHTTP?을 : 나는 또한 여기에 설명/해결책을 발견

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

3.3.1 okHTTP 사용하고 있습니다. 전에 언급했듯이. sha512/메소드가 아닌 bks 파일을 사용하고 싶습니다.

따라서 javax.ssl.Factory를 okHTTP-sslFactory로 구문 분석하는 방법 또는 bks 생성 파일로 okHTTPsslFactory를 만드는 방법을 알아야합니다.

또한 setSSLSocketFactory 메서드는 okHTTP 3.1.1에서 더 이상 사용할 수 없습니다.

정말 고맙습니다. 시간을내어이 질문에 답변 해 주셔서 감사합니다.

답변

0

는 대신

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

는 희망이 도움이 다음 구문을 사용한다!

+1

오, 감사합니다. 나는 정신이 이상하다! 나는 forgotton에 .Builder()를 추가했습니다. 부끄러운 줄 알아라 : / – user3325230