直接点来思路:
这两种方式,原本就是一种方式,这里我放两种案例主要是针对不同的项目,所展现的形式不一样
以下是两种方式的核心思路:
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();
至此第一种方式的思路及其步骤的介绍已经完毕,接下来直接看第二种方式;
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端 读取证书的代码流程,请关注本博客,欢迎分享;
我们博客的口号是 分享,共勉,互促;
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。