Android Okhttp3添加https自签名证书以及Glide4(1),银行软件开发面试题

  • @param certificates 证书的输入流

  • @return SSLSocketFactory

*/

public static SSLSocketFactory getSSLSocketFactory(InputStream… certificates) {

return getSSLSocketFactory(null,certificates);

}

/**

  • 双向认证

  • @param keyManagers KeyManager[]

  • @param certificates 证书的输入流

  • @return SSLSocketFactory

*/

public static SSLSocketFactory getSSLSocketFactory(KeyManager[] keyManagers, InputStream… certificates) {

try {

//获取证书工厂

CertificateFactory certificateFactory = CertificateFactory.getInstance(“X.509”);

//创建秘钥,添加证书进去

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

keyStore.load(null);

int index = 0;

for (InputStream certificate : certificates) {

String certificateAlias = Integer.toString(index++);

keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));

try {

if (certificate != null) certificate.close();

} catch (IOException e) {

e.printStackTrace();

}

}

//创建信任管理工厂

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

//初始化信任管理器

trustManagerFactory.init(keyStore);

//获取SSL上下文对象

SSLContext sslContext = SSLContext.getInstance(“TLS”);

//初始化信任管理器

sslContext.init(keyManagers, trustManagerFactory.getTrustManagers(), new SecureRandom());

//获取socket工厂

SSLSocketFactory socketFactory = sslContext.getSocketFactory();

return socketFactory;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

测试运行,完美解决。

2.信任所有证书(不建议使用)

服务端提供的证书文件,如果服务端更改了需要客户端进行相应的更改,否则无法请求服务端数据。如果想不换证书可以继续访问,可以通过X509TrustManager信任所有的证书,以达到客户端不换证书文件就能获取到服务端数据,但不建议这样使用!!!

/**

*信任所有证书(不建议使用)

  • @return

*/

public static SSLSocketFactory getAllSSLSocketFactory(){

//创建X509信任管理器

TrustManager[] trustManagers = new TrustManager[]{

new X509TrustManager() {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[0];

}

}

};

try {

//获取SSL上下文对象

SSLContext sslContext = SSLContext.getInstance(“TLS”);

//初始化无信任管理器

sslContext.init(null, trustManagers, new SecureRandom());

//获取socket工厂

SSLSocketFactory socketFactory = sslContext.getSocketFactory();

return socketFactory;

} catch (NoSuchAlgorithmException | KeyManagementException e) {

e.printStackTrace();

}

return null;

}

四、Glide4.0以上 添加自签名证书

Glide 直接加载没有权威机构颁发的证书https的URL会直接抛出错误SSLHandshakeException(CertPathValidatorException证书路径验证器异常)

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

在这里插入图片描述

看到CertPathValidatorException这个异常,不用多说也知道什么原因导致的,所以我们需要对Glide内部的Okhttp3进行https自签名。

  1. 从Glide官网查到,需 添加Glide需要的依赖

在这里插入图片描述

// Glide图片加载库

api ‘com.github.bumptech.glide:glide:4.11.0’

// Glide需要处理注解时的依赖库,用于处理注解并生成java类

annotationProcessor ‘com.github.bumptech.glide:compiler:4.11.0’

// Glide集成OkHttp时需要使用的库

api ‘com.github.bumptech.glide:okhttp3-integration:4.11.0’

  1. 创建一个类继承AppGlideModule并对该类添加GlideModule注解,由Glide的注解处理器自动帮我们处理该类,无需其他操作和配置,添加Https的证书信任,最后替换掉Glide内部的okHttp使用我们自己创建的

//注解处理器帮助我们生成meta-data,无需自行配置

@GlideModule

public class OkHttpGlideModule extends AppGlideModule {

private SSLSocketFactory mSSLSocketFactory;

private X509TrustManager mX509TrustManager;

@Override

public void registerComponents(Context context, Glide glide, Registry registry) {

super.registerComponents(context, glide, registry);

replace(registry);

}

private void replace(Registry registry) {

//信任管理器

mX509TrustManager = new X509TrustManager() {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }

@Override

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中…(img-5OQj7lbZ-1711618014832)]

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

[外链图片转存中…(img-kavjaU93-1711618014832)]

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

[外链图片转存中…(img-bENIKD5p-1711618014832)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值