场景:对方提供ca证书和client证书以及service证书;我们去请求对方的https地址。

步骤一: 先制作证书

echo "1、创建 自己的JKS 文件.."
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -passout 123456
keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore server.jks -deststoretype JKSecho "2、导入对方信任.."
keytool -keystore server.jks -keypass 123456 -storepass 123456 -alias ca -import -trustcacerts -file ca.crt
keytool -keystore server.jks -keypass 123456 -storepass 123456 -alias server -import -trustcacerts -file server.crt
keytool -keystore server.jks -keypass 123456 -storepass 123456 -alias client -import -trustcacerts -file client.crt生成的时候可能会需要
SUbjectAlternativeName,根据需要填写。

证书制作好了,只用server.jks就可以搞定

步骤二:配置springboot项目

2.1首先将生成的server.jsk导入resources目录

2.2修改application.yml

server:port: 20312ssl:enabled: truekey-store-type: JKSkey-store: classpath:server.jkskey-store-password: 123456key-alias: 1trust-store: classpath:server.jkstrust-store-password: 123456trust-store-provider: SUNtrust-store-type: JKSclient-auth: need

2.3将对方证书导入jdk,具体操作可以百度,pem格式的。

2.4代码里面具体使用,替换成自己的环境即可

String loginPassword = config.getCmUsername() + ":" + config.getCmPassword();String encoded = new sun.misc.BASE64Encoder().encode (loginPassword.getBytes());logger.info("username:{}, pwd:{}", config.getCmUsername(), config.getCmPassword() );HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());KeyStore clientStore = KeyStore.getInstance("JKS");clientStore.load(new FileInputStream("/u01/server.jks"), "123456".toCharArray());KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());kmf.init(clientStore, "123456".toCharArray());KeyManager[] kms = kmf.getKeyManagers();KeyStore trustStore = KeyStore.getInstance("JKS");trustStore.load(new FileInputStream("/u01/jdk1.8.0_171/jre/lib/security/cacerts"), "changeit".toCharArray());TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(trustStore);TrustManager[] tms = tmf.getTrustManagers();SSLContext sslContext = null;sslContext = SSLContext.getInstance("TLS");sslContext.init(kms, tms, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());URL u = new URL(urlPath);HttpsURLConnection httpUrlConn = (HttpsURLConnection) u.openConnection();try{httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setRequestMethod("GET");httpUrlConn.setUseCaches(false);httpUrlConn.setInstanceFollowRedirects(true);httpUrlConn.setRequestProperty ("Authorization", "Basic " + encoded);httpUrlConn.setRequestProperty("Content-Type", "application/json");httpUrlConn.setRequestProperty("Accept", "application/json");httpUrlConn.setConnectTimeout(2000);httpUrlConn.setReadTimeout(3000);httpUrlConn.connect();// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;logger.error("result {}", buffer.toString());}catch(Exception e){logger.error("http request error:{}", e);}finally{if(httpUrlConn != null) httpUrlConn.disconnect();}

java使用证书双向认证相关推荐

  1. java使用bks双向认证_GitHub - wanglijun93/RxHttpUtils: Rxjava+Retrofit封装,便捷使用

    重磅推出 RxHttpUtils 2.x 版本 RxJava+Retrofit封装,基于RxJava2和Retrofit2重构,便捷使用 上次封装的是基于RxJava1版本的,时隔半年多之后现在推出基 ...

  2. QtJava笔记-Qt与Java进行SSL双向认证(Qt服务端,Java客户端)

    程序运行截图如下: Qt作为服务端,Java作为客户端. 这里的服务端是用的p12证书,客户端使用的是jks. 具体的生成方式看以前的博文. QSSLServer.h #ifndef QSSLSERV ...

  3. java使用bks双向认证_android客户端SSL单向双向认证

    最近一直在做SSL的研究,前几天写了一篇SSL握手过程的文章,今天写下android客户端SSL单双向认证的示例 操作系统是win7,服务器用的tomcat6,客户端跑在1.6的模拟器上,证书都是自签 ...

  4. firefox+linux+nginx搭建server与client通过证书双向认证环境

    项目中需要搭建一个server和client基于证书的双向认证环境.由我来做,我也不会. 经过一晚上的研究,基本摸清了(知其然不知其所以然).做下笔记. 基本环境: 1.安装nginx. 2.安装op ...

  5. java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android

    客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...

  6. nginx配置反向代理验证ssl证书 双向认证

    适用于公司内部一些业务系统对安全性要求比较高,业务系统只允许公司内部人员访问,而且要求浏览器要安装证书登录,对公司入职有需求的人员开通证书,流失的人员注销证书. 修改openssl配置参数 vim / ...

  7. iOS https证书双向认证的实现机制

    文章目录 原理 单向认证流程 双向认证流程 证书生成 生成自签名根证书 生成自签名服务器端证书 生成自签名客户端证书 AFNetworking对于证书的校验机制 原理 双向认证,顾名思义,客户端和服务 ...

  8. java实现 SSL双向认证

    http://avery-leo.iteye.com/blog/276096 实现技术: JSSE(Java Security Socket Extension) 是Sun为了解决在Internet上 ...

  9. QtJava笔记-Qt与Java进行SSL双向认证(Qt客户端,Java服务端)

    这里使用Java作为服务端,使用Qt作为客户端. 程序运行截图如下: 这里的证书Qt使用的p12,Java使用的jks,看以前的博文生成. 源码打包下载地址: https://github.com/f ...

最新文章

  1. was服务器编码修改,两种was容器下应用乱码问题的解决方案.doc
  2. Python 技术篇-windows服务器flask服务的启用与使用实例演示
  3. Java 枚举:实现接口
  4. 前端学习(3072):vue+element今日头条管理-删除文章失败(json-bigint)
  5. DRBD+keepalived+LAMP+discuz
  6. 动态照片墙 python 实现_利用python生成照片墙的示例代码
  7. 镶嵌至新栅格ArcGIS出现send to mail闪退情况的解决方法
  8. Namenode双机热备之Pacemaker
  9. Less的@import指令
  10. 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
  11. 3.11 框架和样式表
  12. 基于MATLAB OCR的发票识别系统
  13. PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
  14. python 广义线性模型_SPSS广义线性模型:广义估计方程
  15. C语言基本数据类型占内存的大小
  16. C语言网络编程实战之线上五子棋游戏(二)
  17. Pure Strategy Game
  18. 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术
  19. 谷歌地图创建自定义位置_如何使用Google Home为任何命令创建自定义快捷方式
  20. ListView点击事件失效

热门文章

  1. 黄式宪:《江山美人》又见“侠女”传奇
  2. HC32_HC32F072FAUA_I2C的使用
  3. ubuntu禁用自带nouveau驱动导致不能进入系统的解决方法
  4. Vue全家桶+SSR+Koa2全栈开发美团网⑦——首页开发
  5. 2021年古城中学高考成绩查询,丽江古城第一高级中学2021年排名
  6. 新手练车小白的自我提升
  7. 字、半字、字节的区别
  8. matlab中sign怎么表示,matlab sign函数用法及实例
  9. linux小米3调试方法,ubuntu下小米真机调试
  10. atom插件下载教程