์ด ์ค๋ฅ๋ Android 10(API 29) ์ด์์์ OkHttp์ sslSocketFactory ์ค์ ์ด ์๋ชป๋์์ ๋ ๋ฐ์ํฉ๋๋ค.
์ฃผ๋ ์์ธ์ TrustManager๋ฅผ ์ง์ ์ค์ ํ์ง ์์์ OkHttp๊ฐ ๊ธฐ๋ณธ SSL/TLS ๊ตฌ์ฑ์ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ ๊ฒ์ ๋๋ค.
java.lang.IllegalStateException: Unable to extract the trust manager on Android10Platform,
sslSocketFactory is class com.android.org.conscrypt.OpenSSLSocketFactoryImpl
๐ ์ฃผ์ ์์ธ
sslSocketFactory() ์ฌ์ฉ ์ TrustManager๋ฅผ ๋ช
ํํ๊ฒ ์ ๊ณตํ์ง ์์TrustManager๋ฅผ ์ง์ ์ถ์ถํ๋ ๊ฒ์ด ์ ํ๋จSSLSocketFactory๋ฅผ ์ฌ์ฉํ์ฌ OkHttp๊ฐ ์ ๋ขฐํ ์ ์๋ ๋คํธ์ํฌ ์์ฒญ์ ์ํํ๋ ค ํจโ
ํด๊ฒฐ ๋ฐฉ๋ฒ โ TrustManager๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ์ฌ OkHttpClient๋ฅผ ์ด๊ธฐํํด์ผ ํฉ๋๋ค.
SSLSocketFactory ๋ฐ TrustManager ์ค์ ํ๊ธฐOkHttp์์ sslSocketFactory()๋ฅผ ์ฌ์ฉํ ๋, ๋ช
ํํ TrustManager๋ฅผ ํจ๊ป ์ ๊ณตํด์ผ ํฉ๋๋ค.
TrustManager ๋ฐ SSLSocketFactory ์ค์ java
๋ณต์ฌํธ์ง
import okhttp3.OkHttpClient;
import javax.net.ssl.*;
public class OkHttpHelper {
public static OkHttpClient getSecureClient() {
try {
// 1. ๊ธฐ๋ณธ TrustManagerFactory ์์ฑ
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
// 2. TrustManager๊ฐ ์กด์ฌํ๋์ง ํ์ธ
if (trustManagers.length == 0 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:" + trustManagers);
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
// 3. TLS ๊ธฐ๋ฐ SSLContext ์์ฑ
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// 4. OkHttpClient์ ์ฌ๋ฐ๋ฅธ TrustManager์ ํจ๊ป ์ค์
return new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, trustManager)
.build();
} catch (Exception e) {
throw new RuntimeException("Failed to create secure OkHttpClient", e);
}
}
}
โ ์ค๋ช
TrustManagerFactory๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๋ณธ TrustManager๋ฅผ ๊ฐ์ ธ์ด.SSLContext๋ฅผ TLS๋ก ์ด๊ธฐํํ์ฌ SSLSocketFactory๋ฅผ ์์ฑ.sslSocketFactory()๋ฅผ ์ค์ ํ ๋ ๋ฐ๋์ TrustManager๋ ํจ๊ป ์ ๊ณตํด์ผ ํจ.