android okhttp3 配置https证书

android okhttp3 配置https证书,第1张

概述一、写在前面,客户端的证书,一般是由服务端提供的,我们来认识一下:ca.crt    :服务端证书client.crt :客户端证书client.key:客户端证书秘钥ca.crt就是我们客户端单向验证时使用的证书,那么client.crt和client.key就应该是双向验证用到的bks了,于是重点就是他们间的转换了

一、写在前面,客户端的证书,一般是由服务端提供的,我们来认识一下:

ca.crt       :服务端证书

clIEnt.crt  :客户端证书

clIEnt.key :客户端证书秘钥

ca.crt就是我们客户端单向验证时使用的证书, 那么clIEnt.crt和clIEnt.key就应该是双向验证用到的bks了,于是重点就是他们间的转换了

准备工作,我们用到两个工具:

openssl:证书格式转换及秘钥获取

            下载地址:https://download.csdn.net/download/hhbbeijing/13454495

keytool:

介绍:OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

 

二、正文

先看一段okhttps创建的代码:

OkhttpClIEnt.Builder builder = new OkhttpClIEnt().newBuilder()        .connectTimeout(15, TimeUnit.SECONDS)        .readTimeout(15,TimeUnit.SECONDS)        .addNetworkInterceptor(logInterceptor)        .hostnameVerifIEr(new MYHostnameVerifIEr(HOSTname));if(trustManager != null){    //SSLSocketFactory x509trustmanager    builder.sslSocketFactory(getSSLSocketFactory(trustManager),trustManager);}mOkhttpClIEnt = builder.build();

需要两个参数:

SSLSocketFactory:(2):   BKS_PWD  JKSnametrustManager:(1)  其中CERTname是信任的服务端证书,但格式为cer,由ca.crt格式转换而来。(可以直接修改后缀)

 

(1):

private x509trustmanager getTrustManager(){    inputStream certificate = null;    x509trustmanager trustManager = null;    try {        certificate = mContext.getAssets().open(CERTname);        trustManager = trustManagerForCertificates(certificate);    } catch (Exception e) {        //e.printstacktrace();    }    return trustManager;}

(2):

private SSLSocketFactory getSSLSocketFactory(x509trustmanager trustManager) throws NoSuchAlgorithmException, KeyManagementException {    SSLContext context = SSLContext.getInstance("TLS");    TrustManager[] trustManagers = {trustManager};    KeyManager[] keyManagers = getKeyManager();    context.init(keyManagers, trustManagers, new SecureRandom());    return context.getSocketFactory();}private KeyManager[] getKeyManager() {    try {        String pwd = BKS_PWD;        inputStream bks = mContext.getAssets().open(JKSname);        KeyStore clIEntKeyStore = KeyStore.getInstance("BKS");        clIEntKeyStore.load(bks, pwd.tochararray());        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());        keyManagerFactory.init(clIEntKeyStore, pwd.tochararray());        return keyManagerFactory.getKeyManagers();    } catch (Exception e) {        //e.printstacktrace();    }    return null;}

重点来了,如何

1、androID平台能识别的客户端证书 为:.bks格式的,需要格式转换,分两步:

    第一步,将 clIEnt.crt 和 clIEnt.key转换成 clIEnt.p12

   openssl pkcs12 -export -in clIEnt.crt -inkey clIEnt.key -out clIEnt.p12 -name tomcat -CAfile ca.crt -caname root -chain

  第二步,把.p12格式转换成.bks

  使用 【portecle】工具转换为 .bks (JKSname),记住输入的密码 (BKS_PWD)。

2、由ca.crt格式转换而来。(可以直接修改后缀)或者  openssl x509 -in ca.crt -out server.cer -outform der

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

至此全部完成。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

参考文献:

https://blog.csdn.net/liudehuaii18/article/details/50373652

 

总结

以上是内存溢出为你收集整理的android okhttp3 配置https证书全部内容,希望文章能够帮你解决android okhttp3 配置https证书所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1058151.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存