一 、首先是  单向认证的原理,首先说下,下面的文章我没看出来是双向认证的原理(我觉得是单向认证的),你们自己理解

https://www.jianshu.com/p/733dc1f06acf

二、实战操作

1. 服务器jks 证书库生成

keytool -genkey -alias server -keyalg RSA -keystore server.key.p12 -validity 3600

2.客户端 bks 证书库生成

keytool -genkey -alias test -keypass 123456 -keyalg RSA --storetype PKCS12 -keysize 1024 -validity 36500 -keystore test_client.keystore -storepass 123456 -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

3. 服务器证书导出

keytool -exportcert -alias server -file server.crt -keystore server.key.p12

4.客户端证书导出

keytool -export -alias test -keystore test_client.keystore -file test_client.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

5.客户端证书关联服务器证书库

keytool -import -v -file test_client.crt -keystore server.key.p12

6.服务器证书导入客户端证书库

keytool -import -alias server -file server.crt -keystore test_client.keystore -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider。

三、keytool 相关命令

1. keytool -printcert -file "test.crt"  打印证书信息

2. keytool -list -keystore test.p12 打印证书库信息

3.keytool -exportcert -alias zhy_client -file zhy_client.crt -keystore zhy_client.jks  导出证书

4. keytool -importcert -keystore zhy_client.bks -file zhy_client.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider。

5. jks 转 bks

https://blog.csdn.net/ainiyiwan123/article/details/79622548

四.服务器springboot 配置

1、 把生成的证书库server.key.p12  放入 main/resource下

修改applicationproperties:

server.port=8443
server.ssl.key-store=src/main/resources/server.key.p12
server.ssl.key-store-password=123456
server.ssl.key-alias=server
server.ssl.keyStoreType=JKSserver.ssl.trust-store=src/main/resources/server.key.p12
server.ssl.trust-store-password=123456
server.ssl.client-auth=need
server.ssl.trust-store-type=JKS
server.ssl.trust-store-provider=SUN

五.Android 客户端配置

1.这里把  server.crt 、test_client.keystore 拷贝到assets和raw下(只放到raw就可以了)

2、导入洋神的 implementation 'com.zhy:okhttputils:2.6.2'

3、 android7.0配置xml文件

res新建xml文件夹,然后新建 'network_security_config.xml'并配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config><domain includeSubdomains="true">192.168.0.101</domain><debug-overrides><trust-anchors><certificatessrc="@raw/server"/><certificatessrc="@raw/test_client"/></trust-anchors></debug-overrides></domain-config>
</network-security-config>

修改manifest配置

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:name=".App"android:theme="@style/AppTheme"android:networkSecurityConfig="@xml/network_security_config">

加入“”android:networkSecurityConfig="@xml/network_security_config"“”

4.

HttpsUtils.SSLParams sslParams =HttpsUtils.getSslSocketFactory(new InputStream[]{getAssets().open("server.crt")},getAssets().open("test_client.keystore"), "123456");
 OkHttpClient okHttpClient = new OkHttpClient.Builder()
//                .addInterceptor(new LoggerInterceptor("TAG")).sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//                    .sslSocketFactory(SSLHelper.getSSLCertifcation(this)).connectTimeout(10000L, TimeUnit.MILLISECONDS).readTimeout(10000L, TimeUnit.MILLISECONDS).hostnameVerifier(new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {
//                         if (hostname.equals("192.168.0.101")){return true;
//                         }else {
//                             return false;
//                         }}})//其他配置.build();OkHttpUtils.initClient(okHttpClient);
 OkHttpUtils.get().url(url)
//                .addParams("username", "hyman")
//                .addParams("password", "123").build().execute(new StringCallback(){@Overridepublic void onError(Call call, Exception e, int id) {Log.e("okhttp", e.toString());}@Overridepublic void onResponse(String response, int id) {tvContent.setText(response);}});

到此 客户端和服务器都完成了 自建证书的双向认证

android https 双向认证相关推荐

  1. android https双向认证

    为什么80%的码农都做不了架构师?>>>    http://blog.csdn.net/qq_26296197/article/details/53129198 转载于:https ...

  2. android webview单向认证,android 让webview支持自签名证书https 双向认证(SSL)

    最近完成一个项目,安全级别比较高.所以涉及到https双向认证,在网上找了很多资料都没有完美的解决方案.最后参考了org.sandrob.sslexample的实现方式,结合实际情况才完成该技术难题, ...

  3. (转载)Android 让WebView完美支持https双向认证(SSL)

    (转载)https://blog.csdn.net/kpioneer123/article/details/51491739 这是@happyzhang0502   关于webview https的建 ...

  4. Https双向认证Android客户端配置

    Https双向认证啊  做了两遍,第一遍懵懂状态处于 好不容易做好了,换服务器,一下子懵了,使出浑身解数又找了一遍,这下终于好了  快哭啦,必须滴要记录一下,以免以后遇到继续懵,这里用retrofit ...

  5. RN https 双向认证

    一  概述 Rreact Native  https双向认证  Android端修改,有两种方案: 一是修改 facebook桥接Android的网络请求 二是自己新建桥接 android和rn,修改 ...

  6. HTTPS双向认证配置

    最近看了下HTTPS相关的,概念性的东西各位就去查查资料吧.主要找到两篇比较靠谱的文章,收藏下. xiooa面复制自https://my.oschina.net/jjface/blog/339144 ...

  7. Apache httpd设置HTTPS双向认证

    一.环境 httpd: 2.4.4  openssl:1.0.1  os:ubuntu 12.04 LTS 二.场景 我准备在httpd上配置一个HTTPS双向认证,既向客户端表明自己的身份,也只允许 ...

  8. TurboMail邮件系统支持HTTPS双向认证

    2019独角兽企业重金招聘Python工程师标准>>> HTTP单向认证已经被普遍应用,而对企业邮箱安全保密要求更加严格的企事业单位,例如国家保密局等单位,为了达到闭环的安全加密要求 ...

  9. httpd设置HTTPS双向认证

    去年用tomcat.jboss配置过HTTPS双向认证,那时候主要用的是JDK自带的keytool工具.这次是用httpd + openssl,区别比较大 在网上搜索了很多文章,发现全面介绍的不多,或 ...

最新文章

  1. 计算机基本信息的获取
  2. 一文彻底了解Logstash
  3. Dancing Stars on Me HDU - 5533
  4. 文件系统、mkdir、touch、nano、cp笔记
  5. jquery通过attr取html里自定义属性原来这么方便啊
  6. Eclipse导出可执行JAR文件的方法
  7. iOS推送机制下AppDelegate中代理函数执行顺序
  8. 直播首屏耗时400ms以下的优化实践
  9. [中奖]第九届“泰迪杯”挑战赛A题
  10. NGINX简介及工作原理
  11. ERP系统-库存子系统-销售/领料出库单
  12. 最简单!阿里云服务器采用 LNMP一键安装包 配置 Linux+Nginx+Mysql+PHP
  13. 一名合格的Web前端工程师需要具备的8项技能!
  14. jupyter更改默认浏览器的方法
  15. 帕斯卡算术机——数学天才的十余年匠心
  16. 在nameSilo购买域名
  17. android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP
  18. C++ 字符跑酷#2 游戏制作实录
  19. 人工智能辅助药物发现(5)药物属性预测
  20. 【网络问题】微软商店无法打开:重试该操作,无法加载页面。请稍后重试

热门文章

  1. tar,gunzip,gzip,unzip和zgrep 命令的用法和区别
  2. Xcode 系统崩溃问题01
  3. JSOI 2018 Round 1 游记
  4. 7.2修改源码禁用hwc和GPU
  5. 主成分分析(PCA),概率主成分分析(PPCA)和因子分析(FA)的区别?
  6. 星座运势接口、星座查询接口和星座配对接口应用解决方案【源码可用】
  7. OpenCV函数学习:cvRound,cvFloor,cvCeil
  8. CSAPP学习笔记——第九章 虚拟内存(一)内存陷阱
  9. 什么是currentColor
  10. python中for循环流程图_Python中的迭代遍历 for in