From 75612bfbb092c7dd96d034a0db32662e6fd62dc2 Mon Sep 17 00:00:00 2001
From: 18034727885 <973609879@qq.com>
Date: 星期四, 20 八月 2026 13:52:41 +0800
Subject: [PATCH] 优化检测升级逻辑和接口证书验证

---
 app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java |  172 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 137 insertions(+), 35 deletions(-)

diff --git a/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java b/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
index 04a7f3f..fe62003 100644
--- a/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
+++ b/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
@@ -5,8 +5,13 @@
 
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import com.driver.igotrip.BuildConfig;
+import com.driver.igotrip.R;
 import com.driver.igotrip.base.Const;
+import com.driver.igotrip.base.MyApplication;
 import com.driver.igotrip.utils.LogUtils;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
@@ -15,11 +20,22 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Type;
+import java.security.KeyStore;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 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 cn.sinata.xldutils.utils.SPUtils;
 import io.reactivex.Observable;
@@ -43,39 +59,19 @@
  */
 
 public class HttpManager {
-    private static HttpManager httpManager;
-    private final ApiServics service = initBaseData().create(ApiServics.class);
+    //只信任指定证书的服务 安全级别高
+    private final ApiServics service = initBaseData(true, false).create(ApiServics.class);
+    //信任所有证书的服务 安全级别低
+    private final ApiServics allTrustService = initBaseData(false, true).create(ApiServics.class);
     private Gson gson;
-    private Map<String, String> headerParams;
-    private HashMap<String, Object> map;
+    private final Map<String, String> headerParams = new HashMap<>();
+
+    private static final class HttpManagerHolder {
+        private static final HttpManager httpManager = new HttpManager();
+    }
 
     public static synchronized HttpManager getInstance() {
-        if (httpManager == null) synchronized (HttpManager.class) {
-            if (httpManager == null) {
-                httpManager = new HttpManager();
-            }
-        }
-        return httpManager;
-    }
-
-
-    /**
-     * 初始化请求头,具体情况根据需求设置
-     */
-    public void initHeader() {
-        headerParams = new HashMap<>();
-        map = new HashMap<>();
-        // 传参方式为json
-//        headerParams.put("Content-Type", "application/json");
-        headerParams.put("Authorization", "Bearer " + getToken());
-    }
-
-    public HashMap<String, Object> getMap() {
-        if (map == null) {
-            map = new HashMap<>();
-        }
-        map.clear();
-        return map;
+        return HttpManagerHolder.httpManager;
     }
 
     private static String bodyToString(final RequestBody request) {
@@ -93,17 +89,99 @@
         }
     }
 
+    @Nullable
+    private SSLSocketFactory getSSLSocketFactory(X509TrustManager trustManager) {
+        try {
+            SSLContext tls = SSLContext.getInstance("TLS");
+            tls.init(null, new TrustManager[]{trustManager}, null);
+            return tls.getSocketFactory();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 创建特定证书信任管理器
+     */
+    @Nullable
+    private X509TrustManager createTrustManager(int certificateResId) {
+        try {
+            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
+            try (
+                    // 读取证书文件
+                    InputStream inputStream = MyApplication.Companion.getAppContext().getResources().openRawResource(certificateResId)
+            ) {
+                X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);
+
+                // 创建包含该证书的KeyStore
+                KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+                keyStore.load(null, null);
+                keyStore.setCertificateEntry("server", certificate);
+
+                // 创建TrustManager
+                TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+                trustManagerFactory.init(keyStore);
+                return (X509TrustManager) trustManagerFactory.getTrustManagers()[0];
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 创建所有证书信任管理器
+     */
+    @NonNull
+    private X509TrustManager createAllTrustManager() {
+        return new X509TrustManager() {
+            @Override
+            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+
+            }
+
+            @Override
+            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+
+            }
+
+            @Override
+            public X509Certificate[] getAcceptedIssuers() {
+                return new X509Certificate[0];
+            }
+        };
+    }
+
     /**
      * 初始化数据
      *
      */
-    private Retrofit initBaseData() {
-        initHeader();
+    private Retrofit initBaseData(boolean isUseCert, boolean isTrustAll) {
         // 监听请求条件
         OkHttpClient.Builder builder = new OkHttpClient.Builder();
         builder.connectTimeout(3, TimeUnit.MINUTES);
         builder.readTimeout(3, TimeUnit.MINUTES);
         builder.writeTimeout(3, TimeUnit.MINUTES);
+        if (isUseCert) {
+            X509TrustManager trustManager = createTrustManager(R.raw.star_gopost_ci);
+            if (trustManager != null) {
+                SSLSocketFactory sslSocketFactory = getSSLSocketFactory(trustManager);
+                if (sslSocketFactory != null) {
+                    builder.sslSocketFactory(sslSocketFactory, trustManager);
+                }
+            }
+        } else {
+            if (isTrustAll) {
+                X509TrustManager trustManager = createAllTrustManager();
+                SSLSocketFactory sslSocketFactory = getSSLSocketFactory(trustManager);
+                if (sslSocketFactory != null) {
+                    builder.sslSocketFactory(sslSocketFactory, trustManager);
+                }
+            }
+        }
 //        builder.addInterceptor(new Interceptor() {
 //            @Override
 //            public Response intercept(Chain chain) throws IOException {
@@ -149,7 +227,7 @@
         }
 
         Log.i("zzz", "request====" + new JSONObject(params));
-
+        headerParams.put("Authorization", "Bearer " + getToken());
 //        getService.getResult(action.substring(action.lastIndexOf("/") + 1), headerParams, params)
         service.getResult(action, headerParams, params)
                 .subscribeOn(Schedulers.io())
@@ -180,7 +258,20 @@
 //    public <T extends BaseBean> void post(final String action, Map<String, Object> params,
     public void post(final String action, Map<String, Object> params,
                      Observer<ResponseBody> observer) {
-        post(action, params)
+        post(false, action, params, observer);
+    }
+
+    /**
+     * Post请求
+     *
+     * @param isUseAllTrustService 是否使用信任所有证书服务
+     * @param action               请求接口的尾址
+     * @param params               请求参数
+     */
+//    public <T extends BaseBean> void post(final String action, Map<String, Object> params,
+    public void post(boolean isUseAllTrustService, final String action, Map<String, Object> params,
+                     Observer<ResponseBody> observer) {
+        post(isUseAllTrustService, action, params)
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(observer);
@@ -193,13 +284,24 @@
      * @param params 请求参数
      */
     public Observable<ResponseBody> post(final String action, Map<String, Object> params) {
+        return post(false, action, params);
+    }
+
+    /**
+     * Post请求
+     *
+     * @param action 请求接口的尾址
+     * @param params 请求参数
+     */
+    public Observable<ResponseBody> post(boolean isUseAllTrustService, final String action, Map<String, Object> params) {
         if (params == null) {
             params = new HashMap<>();
         }
         int type = getTypeByLanguage();
         params.put(Const.language, type); // 1 中文 2 英文 3 法文
         LogUtils.d("post", params.toString());
-        return service.postResult(action, headerParams, params);
+        headerParams.put("Authorization", "Bearer " + getToken());
+        return (isUseAllTrustService ? allTrustService : service).postResult(action, headerParams, params);
     }
 
     /**

--
Gitblit v1.7.1