首页 > 其他分享 >Android https忽略证书信任问题

Android https忽略证书信任问题

时间:2023-03-29 12:23:05浏览次数:47  
标签:Web return 证书 https Android 信任 客户端

【第一部分,忽略证书信任问题】 直接去第二部分性能问题
搬运自:https://blog.csdn.net/lizeyang/article/details/18983843
java程序在访问https资源时,出现报错

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

1)https通信过程

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。

  image

2)java程序的证书信任规则

如上文所述,客户端会从服务端拿到证书信息。调用端(客户端)会有一个证书信任列表,拿到证书信息后,会判断该证书是否可信任。

如果是用浏览器访问https资源,发现证书不可信任,一般会弹框告诉用户,对方的证书不可信任,是否继续之类。

Java虚拟机并不直接使用操作系统的keyring,而是有自己的security manager。与操作系统类似,jdk的security manager默认有一堆的根证书信任。如果你的https站点证书是花钱申请的,被这些根证书所信任,那使用java来访问此https站点会非常方便。因此,如果用java访问https资源,发现证书不可信任,则会报文章开头说到的错误。

解决问题的方法

1)将证书导入到jdk的信任证书中(理论上应该可行,未验证)

2)在客户端(调用端)添加逻辑,忽略证书信任问题

第一种方法,需要在每台运行该java程序的机器上,都做导入操作,不方便部署,因此,采用第二种方法。下面贴下该方法对应的代码。

1)先实现验证方法

void trustAllHttpsCertificates() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[1];
        trustAllCerts[0] = new MyTrustManager();
        SSLContext sslCtx = SSLContext.getInstance("SSL");
        sslCtx.init(null, trustAllCerts, null);
        javax.net.ssl.SSLSocketFactory sslsocketfactory = sslCtx.getSocketFactory();
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sslsocketfactory);
    }

class MyTrustManager implements TrustManager, X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }

        public void checkClientTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }
    }

2)在访问https资源前,调用

try {
            trustAllHttpsCertificates();
        } catch (Exception e) {
            e.printStackTrace();
        } //setDefaultSSLSocketFactory
        HostnameVerifier hv = (urlHostName, session) -> {
            Log.e("apibhuc", "Warning: URL Host: v7" + urlHostName + " vs. " + session.getPeerHost());
            return true;
        };
        HttpsURLConnection.setDefaultHostnameVerifier(hv);  // outer try catch

【第二部分,以上代码性能问题】

如果你像上面说的每次请求都添加上面的代码,那么会有性能问题,具体就是访问耗时,应将将上面部分代码放至应用初始化时;

标签:Web,return,证书,https,Android,信任,客户端
From: https://www.cnblogs.com/cps666/p/17268463.html

相关文章

  • 全国计算机等级考试(NCRE)证书查询 All In One
    全国计算机等级考试(NCRE)证书查询AllInOneNCRE-中国教育考试网https://ncre.neea.edu.cn/本人查询注册中国教育考试网账号,查询1994年及以后考试证书。其他......
  • Android Studio 学习-第三章 Activity 第二组
    事先申明:所有android类型的学习记录全部基于《第一行代码Android》第三版,在此感谢郭霖老师的书籍帮助。1.注册activity在第一组中,我创建了一个activity,并且编辑布局后......
  • HTTPS加密原理
    一、单向加密单向加密算法又叫做不可逆算法,就是明文被加密后,原则上是不能还原的;名称运行速度安全性MD5快中SHA-1慢高SHA-256更慢更高//h......
  • 京东金融Android瘦身探索与实践
    作者:京东科技冯建华一、背景随着业务不断迭代更新,App的大小也在快速增加,2019年~2022年期间一度超过了117M,期间我们也做了部分优化如图1红色部分所示,但在做优化的同时面临着......
  • Android系统服务DropBoxManagerService详解与实践应用
    作者:vivo互联网客户端团队-MaLian借助系统DropBoxManagerService对于系统文件目录dropbox管理的设计,了解其文件管理的规则、运行机制、读写机制、管控机制,根据其设计一个......
  • 【Android 逆向】apk反编译后重打包
    1.执行apktoolbsmali_dirsmali_dir为反编译出来的数据目录执行后可能会报错I:Buildingresources...W:/root/Desktop/tmp/qimao_dir/qimao_v5.4/AndroidManifes......
  • Android开发 触控事件分发_2_应用层的触控事件分发
    前言在上一篇博客讲解了系统层的触控通道注册,此篇博客将讲解应用层的触控事件分发分发概况流程通过下面的简单流程图大概了解,但是实际使用的时候分发并不是一个下面......
  • 【Android逆向】apk 反编译
    1.Kali搭建apktool环境1.访问apktool官网https://ibotpeaches.github.io/Apktool/install/参考红圈里的步骤处理即可2.执行命令反编译apkapktoold./xxxx_v5.4......
  • 【玖哥乱弹】三句半:Android程序员的一生
    两包泡面一天饱,代码提交天欲晓,领导上班问声早,通宵了;满脸皱纹面相老,神经紊乱血压高,浑身无力头发少,累病了;项目上线钱景好,老板只恨腰包小,卸磨杀驴把你炒,被裁了;房东敲门债主找,朋......
  • android 音标乱码的一些问题
      android就是一个系统,系统中应该有字体,android自身有就一个字体支持的。下面是读取音标乱码的问题,网上转来的。 但是,如果我这字体是数据库来的,怎办怎办  ----------......