자체 서명 된 인증서가 포함 된 자체 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에서 더 이상 사용할 수 없습니다.
정말 고맙습니다. 시간을내어이 질문에 답변 해 주셔서 감사합니다.
오, 감사합니다. 나는 정신이 이상하다! 나는 forgotton에 .Builder()를 추가했습니다. 부끄러운 줄 알아라 : / – user3325230