直接点来思路:
这两种方式,原本就是一种方式,这里我放两种案例主要是针对不同的项目,所展现的形式不一样
以下是两种方式的核心思路:
1, 方法的参数 .p12证书,密码,keyStore类型,算法,协议; 2, 将字符串密码转换为字符数组; 3, KeyStore获取实例,getInstance(keystoreType); 4, 其调用 load(keyStore,pwdChars); 5, KeyManagerFactory获取实例, getInstance(alogrithm); 6, 其调用 init(keyStore对象,pwdchars); 7, TrustManagerFactory 获取实例, getInstance(alogrithm); 8, 其调用 初始化init (KeyStore(null)); 9, SSLContext 获取实例, getInstance(protocol); 10, 其初始化, init(kf.getKeyManager(),ktf.getTrustManager(),null); 11, 最后返回sslcontext.getSocketFactory();结合项目一所展示的内容:
第一步: 创建类,类里面是规定的常量:
其中我们使用到的是这三个参数:
第二步: 创建一个方法,主要是核心思路的展示,这里要非常的详细
具体步骤简介:
第一步骤:
public static SocketFactory createSocketFactory(InputStream keyStore, String password, String keystoreType, String algorithm, String protocol) {} keyStore-----java代码读取的证书内容作为流的形式输出; password-----上面.p12证书创建时所输入的密码; keyStoreType---"PKCS12"; algorithm----"sunx509"; protocol----"TLS"; 第二步骤: char[] pwdChars = password.toCharArray()将字符串密码转换为字符数组;第三步骤:
KeyStore ks = KeyStore.getInstance(keystoreType);获取KeyStore实例;第四步骤:
ks.load(keyStore, pwdChars);使用keyStore对象加载证书及其密码;第五步骤:
KeyManagerFactory kf = KeyManagerFactory.getInstance(algorithm);获取KeyManagerFactory第六步骤:
kf.init(ks, pwdChars);其调用 init(keyStore对象,pwdchars)第七步骤:
TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);获取TrustManagerFactory;第八步骤:
tmf.init((KeyStore)null);初始化TrustManagerFactory对象;第九步骤:
SSLContext context = SSLContext.getInstance(protocol);获取SSLContext实例;第十步骤:
context.init(kf.getKeyManagers(), tmf.getTrustManagers(), null);初始化 SSLContext对象,包含的参数 kf.getKeyManagers(), tmf.getTrustManagers();第十一步骤:
return context.getSocketFactory(); 返回SocketFactory对象至此第一种方式的思路及其步骤的介绍已经完毕,接下来直接看第二种方式;
String password = ""; 获取密码两种方式: 方式一: 直接写配置文件,在service层中加载配置文件,获取密码,适用场景比较窄小,密码较多,不方便管理; 方式二: 文件名以当前密码命名,通过读取全路径,然后截取,获取当前密码; FileInputStream fileInputStream = new FileInputStream("xxxx.p12"); 加载.p12证书; KeyStore keyStore = KeyStore.getInstance("PKCS12"); 获取KeyStore实例; keyStore.load(fileInputStream, password.toCharArray()); 加载keyStore的load方法,参数是.p12证书,及其它对应的密码; KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("sunx509"); 获取KeyManagerFactory实例; keyManagerFactory.init(keyStore, password.toCharArray()); KeyManagerFactory 初始化方法;第二种方式 是项目中读取证书的代码的展示,只是部分代码,请酌情应用到自己的代码里面;
以后还会介绍关于 app端 读取证书的代码流程,请关注本博客,欢迎分享;
我们博客的口号是 分享,共勉,互促;