728x90
오늘은 OKHttp3 에서 발생하는 에러 처리를 다루어 보겠다.
OKHttp3에서 원활한 https 를 접속하기 위해서 대부분 인증서를 무시하는 코드를 함께 넣어서 client 를 빌드해서 사용하는 경우가 많다.
그 때 흔하게 발생하는 에러 중 하나는 아래의 에러이다.
java.lang.NullPointerException: Attempt to get length of null array,
BasicTrustRootIndex 관련 메세지들..
위의 에러는 주로 아래 코드가 문제가 된다. 아래의 getAcceptedIssuers() 의 return null; 이 부분이 문제.
/**
* UnCertificated 허용
*/
public static OkHttpClient.Builder configureClient(final OkHttpClient.Builder builder) {
final TrustManager[] certs = new TrustManager[]{new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(final X509Certificate[] chain,
final String authType) {
}
@Override
public void checkClientTrusted(final X509Certificate[] chain,
final String authType) {
}
}};
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(null, certs, new SecureRandom());
} catch (final java.security.GeneralSecurityException ex) {
ex.printStackTrace();
}
try {
final HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(final String hostname, final SSLSession session) {
return true;
}
};
builder.sslSocketFactory(ctx.getSocketFactory()).hostnameVerifier(hostnameVerifier);
} catch (final Exception e) {
e.printStackTrace();
}
return builder;
}
위의 문제가 되는 부분의 소스를 아래와 같이 수정한다.
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
위와 같이 수정해서 client를 빌드해서 사용하면 문제가 발생하지 않는다.
728x90
'IT > Android' 카테고리의 다른 글
[Notification] 안드로이드 앱 중복 실행 문제 완벽 해결 방법 (12) | 2019.01.21 |
---|---|
[Android] switch error : constant expression required (0) | 2018.12.04 |
Json 파싱 이해하기. (JsonObject, JsonArray, JsonElement) (0) | 2018.11.08 |
Android OKHttp3 에서 발생하는 NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/Platform (0) | 2018.11.08 |
갤럭시S9(SM-G960N) 루팅하기 (21) | 2018.11.07 |