返回顶部
首页 > 资讯 > 移动开发 >AndroidHttps证书过期的两种解决方案
  • 208
分享到

AndroidHttps证书过期的两种解决方案

AndroidHttps证书过期AndroidHttps证书 2022-12-24 12:12:29 208人浏览 安东尼
摘要

目录方案一方案二应该有很多小伙伴遇到这样一个问题,在线上已发布的app里,关于https的cer证书过期,从而导致app所有网络请求失效无法使用。 这个时候有人就要说了,应急发布一个

应该有很多小伙伴遇到这样一个问题,在线上已发布的app里,关于https的cer证书过期,从而导致app所有网络请求失效无法使用。

这个时候有人就要说了,应急发布一个已更新最新cer证书的apk不就完事了么,其实没那么简单,iOS还好可以通过appstore提供的api查询到新版本,但Android就不一样了,需要调用自己Server端提供的api接口查询到新版本,并获取apk下载路径,问题是Https都不能访问了,如何请求到版本信息呢?下面提供两种常见的解决方案:

方案一

将版本信息接口让后台改成http(不推荐,后台因素不可控),或者将本地https的设置一个不安全校验(推荐)。

private static OkHttpClient newOkHttpClient(int timeout){
 
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
 
        return new OkHttpClient.Builder()
                .addInterceptor(new RequestInfoInterceptor())
                //.addInterceptor(logging)
                .addNetworkInterceptor(new TokenHeaderInterceptor())
                .sslSocketFactory(Certificate.getSSLSocketFactory())
                //设置不安全校验
                .hostnameVerifier(Certificate.getUnSafeHostnameVerifier())
                .readTimeout(timeout, TimeUnit.SECONDS)
                .writeTimeout(timeout, TimeUnit.SECONDS)
                .build();
    }
 
    
    public static HostnameVerifier getUnSafeHostnameVerifier() {
        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                return true;
            }
        };
        return hostnameVerifier;
    }

方案二

将xxx.cer证书改成动态读取(以文件的方式从app沙盒里面读取即可),在https证书即将过期时,从服务器下载最新的cer证书更新到沙盒里面,App每次初始化网络请求时读取sdcard最新的证书文件,这样App就永远不会出现https证书过期导致无法使用的问题,流程图如下。

在这里插入图片描述

下面是一些关键的代码:

    private static OkHttpClient newOkHttpClient(int timeout){
 
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
 
        return new OkHttpClient.Builder()
                .addInterceptor(new RequestInfoInterceptor())
                //.addInterceptor(logging)
                .addNetworkInterceptor(new TokenHeaderInterceptor())
                .sslSocketFactory(Certificate.getSSLSocketFactory(BaseApplcation.myApp, new String[]{"/sdcard/xxx.cer"}))
                .hostnameVerifier(Certificate.getUnSafeHostnameVerifier())
                .readTimeout(timeout, TimeUnit.SECONDS)
                .writeTimeout(timeout, TimeUnit.SECONDS)
                .build();
    }
  
    
    public static SSLSocketFactory getSSLSocketFactory(Context context, String[] certificatesFiles) {
        if (context == null) {
            throw new NullPointerException("context == null");
        }
        CertificateFactory certificateFactory;
        try {
            certificateFactory = CertificateFactory.getInstance("X.509");
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null, null);
 
            for (int i = 0; i < certificatesFiles.length; i++) {
                InputStream certificate = new FileInputStream(certificatesFiles[i]);
                keyStore.setCertificateEntry(String.valueOf(i), certificateFactory.generateCertificate(certificate));
 
                if (certificate != null) {
                    certificate.close();
                }
            }
            SSLContext sslContext = SSLContext.getInstance("TLS");
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlGorithm());
            trustManagerFactory.init(keyStore);
            sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
 
        }
        return null;
    }
 
  
    public static SSLSocketFactory getSSLSocketFactory(Context context, int[] certificates) {
        if (context == null) {
            throw new NullPointerException("context == null");
        }
        CertificateFactory certificateFactory;
        try {
            certificateFactory = CertificateFactory.getInstance("X.509");
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null, null);
 
            for (int i = 0; i < certificates.length; i++) {
                InputStream certificate = context.getResources().openRawResource(certificates[i]);
                keyStore.setCertificateEntry(String.valueOf(i), certificateFactory.generateCertificate(certificate));
 
                if (certificate != null) {
                    certificate.close();
                }
            }
            SSLContext sslContext = SSLContext.getInstance("TLS");
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);
            sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
 
        }
        return null;
    }

到此这篇关于Android Https证书过期的解决方案的文章就介绍到这了,更多相关Android Https证书过期内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: AndroidHttps证书过期的两种解决方案

本文链接: https://lsjlt.com/news/175722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • AndroidHttps证书过期的两种解决方案
    目录方案一方案二应该有很多小伙伴遇到这样一个问题,在线上已发布的app里,关于https的cer证书过期,从而导致app所有网络请求失效无法使用。 这个时候有人就要说了,应急发布一个...
    99+
    2022-12-24
    Android Https证书过期 Android Https证书
  • VMware vCenter证书过期解决方法
             vCenter证书过期解决方法  目录 1 概述    2 详细操作步骤         2.1 检查关键的STS证书是否过期并修复         2.2 检查除STS证书外是否还有其余证书...
    99+
    2023-08-31
    运维 服务器
  • SQL Developer过期的两种解决方法
    这篇文章主要讲解了“SQL Developer过期的两种解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Developer过期的两种解决方法”...
    99+
    2024-04-02
  • ssl证书过期如何解决
    要解决SSL证书过期问题,可以按照以下步骤操作:1. 更新证书:联系证书颁发机构(CA)获取新的SSL证书,并按照他们的指示进行更新...
    99+
    2023-08-16
    ssl证书
  • 解决docker的tls(ssl)证书过期问题
    问题现象: [root@localhost ~]# docker image pull xxx.com.cn/centos7 Using default tag: latest E...
    99+
    2024-04-02
  • 企业ssl证书过期怎么解决
    企业ssl证书过期需要重新申请并安装新的证书,具体操作如下:1. 在证书过期前,提前申请新的证书,以免出现证书过期后无法访问网站的情...
    99+
    2023-06-11
    企业ssl证书 ssl证书
  • windows7安全证书过期怎么解决
    要解决Windows 7安全证书过期的问题,可以按照以下步骤进行操作:1. 检查系统时间和日期是否正确:确保电脑的日期和时间设置是准...
    99+
    2023-10-09
    windows7
  • 域名ssl证书过期怎么解决
    如果您的域名SSL证书过期,可以按照以下步骤进行解决:1. 确认证书过期:您可以通过访问您的网站并查看浏览器地址栏上的SSL图标来确...
    99+
    2023-08-15
    ssl证书
  • Win7系统安全证书过期怎么办?Win7系统安全证书过期问题的解决方法
      Win7系统安全证书过期怎么办?相信大家都有遇到过安全证书过期这一问题吧,如果本地的日期和时间都是正确的,那么我们可以尝试重新安装该网站的证书,这样就可以解决安全证书过期的问题了。有用户反应自己用Win7系统,今天打...
    99+
    2023-05-20
    Win7 安全证书 证书过期
  • 如何解决win8安全证书过期的问题
    这篇文章主要介绍了如何解决win8安全证书过期的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在键盘上按下 Windows + R 组合键打开"运行"...
    99+
    2023-06-28
  • 网站https安全证书过期怎么解决
    网站https安全证书过期解决的方法:1、如果是电脑系统时间不对导致的,将电脑系统的时间调整到https安全证书有效期之内即可;2、如果是 https安全证书过期,到签发机构CA续签证书即可;3、如果是当前站点外链网站的https...
    99+
    2024-04-02
  • Win8系统安全证书过期如何解决
    这篇“Win8系统安全证书过期如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Win8系统安全证书过期如何解决”文章吧...
    99+
    2023-07-02
  • 网站https安全证书过期如何解决
    如果网站的HTTPS安全证书过期,可以按照以下步骤解决: 联系网站的管理员或者运营者,让他们尽快更新证书。 如果无法联系到网...
    99+
    2024-05-08
    服务器
  • Vue Token过期问题的2种解决方案小结
    对于token过期,我们有两种方案: 方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的to...
    99+
    2023-02-18
    vue token过期处理 vue token过期 vue token
  • 微信小程序ssl证书过期怎么解决
    微信小程序的SSL证书过期后,需要重新申请、安装证书并更新小程序的域名设置。具体的解决步骤如下:1. 重新申请SSL证书:可以联系S...
    99+
    2023-05-14
    微信小程序ssl证书 ssl证书
  • 网站ssl证书过期无法访问怎么解决
    如果网站SSL证书过期无法访问,可以尝试以下几个解决方法:1、续期SSL证书如果SSL证书已经过期,需要及时续期证书。可以联系SSL...
    99+
    2023-03-19
    网站ssl证书过期 ssl证书 ssl
  • error: (-215:Assertion failed)的两种解决方案
    问题描述:在对视频分帧读取进行差值哈希算法比较时出现读取错误现象,具体代码内容和报错如下: import osimport cv2import numpy as npimport subprocessimport matplotlib.py...
    99+
    2023-09-02
    python 开发语言
  • Spark SerializedLambda错误的两种解决方案
    目录Spark SerializedLambda错误解决方案(一)解决方案(二)执行spark报错EOFException Kryo和SerializedLambdaEOFExcep...
    99+
    2024-04-02
  • 安卓 APK 签名证书过期问题 及 更新签名方案 v3
    最近突然发现公司祖传的签名证书要过期了,急忙开始研究解决方案,在这里记录下我们采取的方式。 一、证书过期 首先,签名证书过期是没办法进行续期或者重新生成的。而更换证书,那原来安装的 App 就必须要卸...
    99+
    2023-08-31
    android
  • pandas 颠倒列顺序的两种解决方案
    在数据预处理过程中可能需要将列的顺序颠倒,有两种方法。 import numpy as np import pandas as pd df = pd.DataFrame(np.a...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作