瀏覽代碼

[공통][New] SSL 인증서 적용은 프로덕트 모드에서만: flavor 로 구분

hyodong.min 7 年之前
父節點
當前提交
3d5f6614eb

+ 26 - 0
app/src/dev/java/kr/co/zumo/app/lifeplus/network/api/SSLSocketFactoryAssign.java

@@ -0,0 +1,26 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.network.api;
+
+import android.util.Log;
+
+import okhttp3.OkHttpClient;
+
+/**
+ * SSLSocketFactoryAssign
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 12. 4.]   [최초 작성]
+ * @since 2018. 12. 4.
+ */
+public class SSLSocketFactoryAssign {
+
+  public SSLSocketFactoryAssign(OkHttpClient.Builder builder) {
+    Log.w("APP# SSLSocketFactoryAssign | SSLSocketFactoryAssign", "|" + " dev pass.........");
+    // nothing
+  }
+}

+ 1 - 71
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/RetrofitService.java

@@ -3,27 +3,11 @@
  */
 package kr.co.zumo.app.lifeplus.network.api;
 
-import android.content.Context;
-
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.security.KeyStore;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateFactory;
-import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import kr.co.zumo.app.R;
-import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
 import okhttp3.OkHttpClient;
 import okhttp3.logging.HttpLoggingInterceptor;
@@ -43,9 +27,6 @@ import retrofit2.converter.gson.GsonConverterFactory;
  */
 class RetrofitService {
 
-  static X509TrustManager storedTrustManager;
-  static SSLSocketFactory storedSslSocketFactory;
-
   static <T> T retrofit(String url, Class<T> className, int timeoutMs/*, String appVer, String userId, String deviceId, String token*/) {
     OkHttpClient.Builder builder = new OkHttpClient.Builder();
 
@@ -79,58 +60,7 @@ class RetrofitService {
       builder.addInterceptor(logging);
     }
 
-    if (AppUtil.isProduct()) {
-      // apply ssl cert
-      try {
-        X509TrustManager trustManager;
-        SSLSocketFactory sslSocketFactory;
-
-        if (null != storedTrustManager && null != storedTrustManager) {
-          trustManager = storedTrustManager;
-          sslSocketFactory = storedSslSocketFactory;
-        }
-        else {
-          Context context = App.getInstance().getContext();
-
-          // Load CAs from an InputStream
-          // (could be from a resource or ByteArrayInputStream or ...)
-          CertificateFactory cf = CertificateFactory.getInstance("X.509");
-          InputStream is = context.getResources().openRawResource(R.raw.chain_rootca_bundle);
-          InputStream caInput = new BufferedInputStream(is);
-          Certificate ca;
-          try {
-            ca = cf.generateCertificate(caInput);
-            // System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
-          } finally {
-            caInput.close();
-          }
-
-          // Create a KeyStore containing our trusted CAs
-          String keyStoreType = KeyStore.getDefaultType();
-          KeyStore keyStore = KeyStore.getInstance(keyStoreType);
-          keyStore.load(null, null);
-          keyStore.setCertificateEntry("ca", ca);
-
-          TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
-          trustManagerFactory.init(keyStore);
-          TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
-
-          if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
-            throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
-          }
-
-          trustManager = (X509TrustManager) trustManagers[0];
-          SSLContext sslContext = SSLContext.getInstance("TLS");
-          sslContext.init(null, new TrustManager[]{trustManager}, null);
-          sslSocketFactory = sslContext.getSocketFactory();
-        }
-
-        builder.sslSocketFactory(sslSocketFactory, trustManager);
-
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+    new SSLSocketFactoryAssign(builder);
 
     Gson gson = new GsonBuilder().create();
     Retrofit retrofit = new Retrofit.Builder()

+ 95 - 0
app/src/product/java/kr/co/zumo/app/lifeplus/network/api/SSLSocketFactoryAssign.java

@@ -0,0 +1,95 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.network.api;
+
+import android.content.Context;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.util.Arrays;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.application.App;
+import kr.co.zumo.app.lifeplus.util.AppUtil;
+import okhttp3.OkHttpClient;
+
+/**
+ * SSLSocketFactoryAssign
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 12. 4.]   [최초 작성]
+ * @since 2018. 12. 4.
+ */
+public class SSLSocketFactoryAssign {
+
+  static X509TrustManager storedTrustManager;
+  static SSLSocketFactory storedSslSocketFactory;
+
+  public SSLSocketFactoryAssign(OkHttpClient.Builder builder) {
+    if (AppUtil.isProduct()) {
+      // apply ssl cert
+      try {
+        X509TrustManager trustManager;
+        SSLSocketFactory sslSocketFactory;
+
+        if (null != storedTrustManager && null != storedSslSocketFactory) {
+          trustManager = storedTrustManager;
+          sslSocketFactory = storedSslSocketFactory;
+        }
+        else {
+          Context context = App.getInstance().getContext();
+
+          // Load CAs from an InputStream
+          // (could be from a resource or ByteArrayInputStream or ...)
+          CertificateFactory cf = CertificateFactory.getInstance("X.509");
+          InputStream is = context.getResources().openRawResource(R.raw.chain_rootca_bundle);
+          InputStream caInput = new BufferedInputStream(is);
+          Certificate ca;
+          try {
+            ca = cf.generateCertificate(caInput);
+            // System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN());
+          } finally {
+            caInput.close();
+          }
+
+          // Create a KeyStore containing our trusted CAs
+          String keyStoreType = KeyStore.getDefaultType();
+          KeyStore keyStore = KeyStore.getInstance(keyStoreType);
+          keyStore.load(null, null);
+          keyStore.setCertificateEntry("ca", ca);
+
+          TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+          trustManagerFactory.init(keyStore);
+          TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
+
+          if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
+            throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
+          }
+
+          trustManager = (X509TrustManager) trustManagers[0];
+          SSLContext sslContext = SSLContext.getInstance("TLS");
+          sslContext.init(null, new TrustManager[]{trustManager}, null);
+          sslSocketFactory = sslContext.getSocketFactory();
+        }
+
+        builder.sslSocketFactory(sslSocketFactory, trustManager);
+
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
+  }
+}