java使用证书双向认证
场景:对方提供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使用证书双向认证相关推荐
- java使用bks双向认证_GitHub - wanglijun93/RxHttpUtils: Rxjava+Retrofit封装,便捷使用
重磅推出 RxHttpUtils 2.x 版本 RxJava+Retrofit封装,基于RxJava2和Retrofit2重构,便捷使用 上次封装的是基于RxJava1版本的,时隔半年多之后现在推出基 ...
- QtJava笔记-Qt与Java进行SSL双向认证(Qt服务端,Java客户端)
程序运行截图如下: Qt作为服务端,Java作为客户端. 这里的服务端是用的p12证书,客户端使用的是jks. 具体的生成方式看以前的博文. QSSLServer.h #ifndef QSSLSERV ...
- java使用bks双向认证_android客户端SSL单向双向认证
最近一直在做SSL的研究,前几天写了一篇SSL握手过程的文章,今天写下android客户端SSL单双向认证的示例 操作系统是win7,服务器用的tomcat6,客户端跑在1.6的模拟器上,证书都是自签 ...
- firefox+linux+nginx搭建server与client通过证书双向认证环境
项目中需要搭建一个server和client基于证书的双向认证环境.由我来做,我也不会. 经过一晚上的研究,基本摸清了(知其然不知其所以然).做下笔记. 基本环境: 1.安装nginx. 2.安装op ...
- java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android
客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...
- nginx配置反向代理验证ssl证书 双向认证
适用于公司内部一些业务系统对安全性要求比较高,业务系统只允许公司内部人员访问,而且要求浏览器要安装证书登录,对公司入职有需求的人员开通证书,流失的人员注销证书. 修改openssl配置参数 vim / ...
- iOS https证书双向认证的实现机制
文章目录 原理 单向认证流程 双向认证流程 证书生成 生成自签名根证书 生成自签名服务器端证书 生成自签名客户端证书 AFNetworking对于证书的校验机制 原理 双向认证,顾名思义,客户端和服务 ...
- java实现 SSL双向认证
http://avery-leo.iteye.com/blog/276096 实现技术: JSSE(Java Security Socket Extension) 是Sun为了解决在Internet上 ...
- QtJava笔记-Qt与Java进行SSL双向认证(Qt客户端,Java服务端)
这里使用Java作为服务端,使用Qt作为客户端. 程序运行截图如下: 这里的证书Qt使用的p12,Java使用的jks,看以前的博文生成. 源码打包下载地址: https://github.com/f ...
最新文章
- was服务器编码修改,两种was容器下应用乱码问题的解决方案.doc
- Python 技术篇-windows服务器flask服务的启用与使用实例演示
- Java 枚举:实现接口
- 前端学习(3072):vue+element今日头条管理-删除文章失败(json-bigint)
- DRBD+keepalived+LAMP+discuz
- 动态照片墙 python 实现_利用python生成照片墙的示例代码
- 镶嵌至新栅格ArcGIS出现send to mail闪退情况的解决方法
- Namenode双机热备之Pacemaker
- Less的@import指令
- 从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
- 3.11 框架和样式表
- 基于MATLAB OCR的发票识别系统
- PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
- python 广义线性模型_SPSS广义线性模型:广义估计方程
- C语言基本数据类型占内存的大小
- C语言网络编程实战之线上五子棋游戏(二)
- Pure Strategy Game
- 基于python的影评数据分析_基于Python聚焦型网络爬虫的影评获取技术
- 谷歌地图创建自定义位置_如何使用Google Home为任何命令创建自定义快捷方式
- ListView点击事件失效
热门文章
- 黄式宪:《江山美人》又见“侠女”传奇
- HC32_HC32F072FAUA_I2C的使用
- ubuntu禁用自带nouveau驱动导致不能进入系统的解决方法
- Vue全家桶+SSR+Koa2全栈开发美团网⑦——首页开发
- 2021年古城中学高考成绩查询,丽江古城第一高级中学2021年排名
- 新手练车小白的自我提升
- 字、半字、字节的区别
- matlab中sign怎么表示,matlab sign函数用法及实例
- linux小米3调试方法,ubuntu下小米真机调试
- atom插件下载教程