java中 SSL认证和keystore使用
// 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。
//KeyManager[] 第一个参数是授权的密钥管理器,用来授权验证。TrustManager[]第二个是被授权的证书管理器,用来验证服务器端的证书。第三个参数是一个随机数值,可以填写null。如果只是服务器传输数据给客户端来验证,就传入第一个参数就可以,客户端构建环境就传入第二个参数。
[代码]java代码:
- import java.io.FileInputStream;
- import java.io.*;
- import java.net.Socket;
- import java.security.KeyStore;
- import javax.net.ssl.KeyManagerFactory;
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.SSLServerSocket;
- import javax.net.ssl.SSLServerSocketFactory;
- public class KeystoreTest {
- /**
- * name:KeystoreTest
- * author:suju
- */
- public static void main(String[] args) throws Exception{
- String key="c:/.keystore";
- KeyStore keystore=KeyStore.getInstance("JKS");
- //keystore的类型,默认是jks
- keystore.load(new FileInputStream(key),"123456".toCharArray());
- //创建jkd密钥访问库 123456是keystore密码。
- KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
- kmf.init(keystore,"asdfgh".toCharArray());
- //asdfgh是key密码。
- //创建管理jks密钥库的x509密钥管理器,用来管理密钥,需要key的密码
- SSLContext sslc=SSLContext.getInstance("SSLv3");
- // 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。
- sslc.init(kmf.getKeyManagers(),null,null);
- //第二个参数TrustManager[] 是认证管理器,在需要双向认证时使用,
- //构造ssl环境
- SSLServerSocketFactory sslfactory=sslc.getServerSocketFactory();
- SSLServerSocket serversocket=(SSLServerSocket) sslfactory.createServerSocket(9999);
- //创建serversocket,监听,并传输数据来验证授权
- for(int i=0;i<15;i++)
- {
- final Socket socket=serversocket.accept();
- new Thread(){
- public void run()
- {
- try{
- InputStream is=socket.getInputStream();
- OutputStream os=socket.getOutputStream();
- byte[] buf=new byte[1024];
- int len=is.read(buf);
- System.out.println(new String(buf));
- os.write("ssl test".getBytes());
- os.close();
- is.close();
- }catch(Exception e)
- {// }
- }
- }.start();
- }
- serversocket.close();
- }
- }
import java.io.FileInputStream; import java.io.*; import java.net.Socket; import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory;public class KeystoreTest {/*** name:KeystoreTest* author:suju*/public static void main(String[] args) throws Exception{String key="c:/.keystore";KeyStore keystore=KeyStore.getInstance("JKS");//keystore的类型,默认是jkskeystore.load(new FileInputStream(key),"123456".toCharArray());//创建jkd密钥访问库 123456是keystore密码。KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");kmf.init(keystore,"asdfgh".toCharArray());//asdfgh是key密码。//创建管理jks密钥库的x509密钥管理器,用来管理密钥,需要key的密码SSLContext sslc=SSLContext.getInstance("SSLv3");// 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。sslc.init(kmf.getKeyManagers(),null,null);//第二个参数TrustManager[] 是认证管理器,在需要双向认证时使用,//构造ssl环境SSLServerSocketFactory sslfactory=sslc.getServerSocketFactory();SSLServerSocket serversocket=(SSLServerSocket) sslfactory.createServerSocket(9999);//创建serversocket,监听,并传输数据来验证授权for(int i=0;i<15;i++){ final Socket socket=serversocket.accept();new Thread(){public void run(){try{InputStream is=socket.getInputStream();OutputStream os=socket.getOutputStream();byte[] buf=new byte[1024];int len=is.read(buf);System.out.println(new String(buf));os.write("ssl test".getBytes());os.close();is.close();}catch(Exception e){// }}}.start();}serversocket.close(); } }
客户端:
[代码]java代码:
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.security.KeyStore;
- import javax.net.ssl.KeyManagerFactory;
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.SSLServerSocket;
- import javax.net.ssl.SSLServerSocketFactory;
- import javax.net.ssl.SSLSocket;
- import javax.net.ssl.SSLSocketFactory;
- import javax.net.ssl.TrustManagerFactory;
- public class KeystoreTestClient {
- /**
- * name:KeystoreTestClient
- * author:suju
- */
- public static void main(String[] args) throws Exception{
- String key="c:/client";
- KeyStore keystore=KeyStore.getInstance("JKS"); //创建一个keystore来管理密钥库
- keystore.load(new FileInputStream(key),"123456".toCharArray());
- //创建jkd密钥访问库
- TrustManagerFactory tmf=TrustManagerFactory.getInstance("SunX509");
- tmf.init(keystore); //验证数据,可以不传入key密码
- //创建TrustManagerFactory,管理授权证书
- SSLContext sslc=SSLContext.getInstance("SSLv3");
- // 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。
- sslc.init(null,tmf.getTrustManagers(),null);
- //KeyManager[] 第一个参数是授权的密钥管理器,用来授权验证。第二个是被授权的证书管理器,
- //用来验证服务器端的证书。只验证服务器数据,第一个管理器可以为null
- //构造ssl环境
- SSLSocketFactory sslfactory=sslc.getSocketFactory();
- SSLSocket socket=(SSLSocket) sslfactory.createSocket("127.0.0.1",9999);
- //创建serversocket通过传输数据来验证授权
- InputStream is=socket.getInputStream();
- OutputStream os=socket.getOutputStream();
- os.write("client".getBytes());
- byte[] buf=new byte[1024];
- int len=is.read(buf);
- System.out.println(new String(buf));
- os.close();
- is.close();
- }
- }
import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory;public class KeystoreTestClient {/*** name:KeystoreTestClient* author:suju*/public static void main(String[] args) throws Exception{String key="c:/client";KeyStore keystore=KeyStore.getInstance("JKS"); //创建一个keystore来管理密钥库keystore.load(new FileInputStream(key),"123456".toCharArray());//创建jkd密钥访问库TrustManagerFactory tmf=TrustManagerFactory.getInstance("SunX509");tmf.init(keystore); //验证数据,可以不传入key密码//创建TrustManagerFactory,管理授权证书SSLContext sslc=SSLContext.getInstance("SSLv3");// 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。sslc.init(null,tmf.getTrustManagers(),null);//KeyManager[] 第一个参数是授权的密钥管理器,用来授权验证。第二个是被授权的证书管理器,//用来验证服务器端的证书。只验证服务器数据,第一个管理器可以为null//构造ssl环境SSLSocketFactory sslfactory=sslc.getSocketFactory();SSLSocket socket=(SSLSocket) sslfactory.createSocket("127.0.0.1",9999);//创建serversocket通过传输数据来验证授权InputStream is=socket.getInputStream();OutputStream os=socket.getOutputStream(); os.write("client".getBytes()); byte[] buf=new byte[1024];int len=is.read(buf);System.out.println(new String(buf)); os.close();is.close();} }
使用其他keystore来创建key,如果keystore不存在就创建一个新的。 keytool --genkeypair -keystore c:\client
导出一个key keytool -exportcert -alias mykey -file c:\mykey.cer
导入一个key到一个keystore, keytool -importcert -alias mykey -file c:\mykey.cer -keystore c:\client
还有很多关于key的操作,keytool提供了-help帮助命令
原文地址:http://blog.csdn.net/a495614205/article/details/12648939
java中 SSL认证和keystore使用相关推荐
- java ssl是什么意思_java中SSL是什么?包括哪些内容?
大家都知道,java中关于网络安全的知识是非常多的,这也是java在日常的学习中比较重要的一个点.java中SSL的定义也是需要掌握的,一起来了解一下吧. 首先,SSL代表安全套接字层. 它是一种用于 ...
- 【ssl认证、证书】java中的ssl语法API说明(SSLContext)、与keytool 工具的联系
文章目录 1. 前言 java中的ssl语法与keytool 工具的联系 2. SSLContext的体系 2.1 KeyStore 2.1.1 通过证书库文件创建: 2.1.2 随机生成自签名证书库 ...
- Java笔记-基于Spring Boot的SOAP双向SSL认证及WS-Security
这里服务端开放了简单的SOAP的API,但是想获取数据时需要双向SSL以及WS-Security签名. 其中对应的xsd文件如下: <xs:schema xmlns:xs="http: ...
- 【ssl认证、证书】SSL双向认证java实战、keytool创建证书
文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...
- JAVA爬虫https_java爬虫问题一:解决使用htmlunit 时候ssl认证失败问题
java爬虫问题一:解决使用htmlunit 时候ssl认证失败问题 凯哥Java 凯哥java 前言: 在使用htmlunit 爬取其他网站信息的时候,提示错误信息:unable to find v ...
- HTTPS 中双向认证SSL 协议的具体过程
HTTPS 中双向认证SSL 协议的具体过程: 这里总结为详细的步骤: ① 浏览器发送一个连接请求给安全服务器. ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器. ③ 客户浏览器检查服务 ...
- 华为hcie认证中SSL基本介绍华为hcie必看
华为hcie认证中SSL基本介绍华为hcie必看,SSL 全称为Secure Sockets Layer,安全套接层.是一种提供保证私密性的安全协议.SSL能使客户端与服务器之间的通信不被截取及窃听, ...
- java中setconstrations_java程序员认证模拟试题及解析
java程序员认证模拟试题及解析 天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为.以下是小编为大家搜索整理的java程序员认证模拟试题及解析,希望能给大家带来帮助!更多精 ...
- 解决Java中JWT的token认证接口测试时:认证失败,无法访问系统资
步骤: 登录页面后,右击检查->network->XHR->复制Authorization的内容 粘贴到postman中安全认证哪里,类型下载token.
最新文章
- 【实战】OpenCV钢管计数分析与方法比较
- 海思3559与全志a83t比较
- linux命令行怎么注释,Bash Shell 注释多行的几种方法
- 深度学习100例-卷积神经网络(LeNet-5)深度学习里的“Hello Word” | 第22天
- LinearLayout和RelativeLayoutnbs…
- leetcode-有效的括号(三种语言不同思路)
- HDU - 5008 Boring String Problem(后缀数组+二分)
- 这个偏僻的小山村竟出了12位博士28位硕士,高产“学霸”背后原因曝光......
- linux-bash的基本-自动补全-快捷键-历史-命令的别名
- UpdateProgress控件
- 【英语学习】【WOTD】tenacious 释义/词源/示例
- centos php 开启mysql扩展_CentOS 7下部署php7.1和开启MySQL扩展的方法教程
- Java用POI导出Excel表格中的数据
- linux syn_recv过多ip,SYN_RECV处理方案
- Incorrect string value: '\xF0\x9F\x91\x93\xF0\x9F...' for column 'xxx' at row 1
- 【金融项目】尚融宝项目(十六)
- matlab 数值计算课 二阶微分方程-龙格库塔方法 ODE45
- 数据结构-青蛙杯棒球比赛
- 携职教育:2022年初级会计考试证书领取流程及所需材料
- Ubuntu通过samba winbind集成AD账号
热门文章
- Cast from pointer to smaller type 'int' loses information”
- Coursera 学习记录:Tomorrow never knows?(实现日期加一的操作)
- 51单片机实现两路AD检测、数码管显示、串口获取
- Mac和Windows键盘对应关系
- 我国拟立法禁止大数据杀熟;工信部通报43款App违规整改不彻底丨钛晚报
- 靶场发展态势③美国防部赛博安全靶场(IAR/CSR)
- 如何携号转网只需三步
- 【2022-9-21最新】青龙面板搭建+sillyGirl+对接微信公众号+onebot
- gif动图过大怎么处理?怎么压缩gif图片大小?
- 网站运营中长尾关键词优化策略