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();
- }
- }
客户端:
[代码]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();
- }
- }


使用其他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帮助命令
- 顶
- 1
java中 SSL认证和keystore使用的更多相关文章
- JAVA中SSL证书认证通讯
JAVA中SSL证书认证通讯 SSL通讯服务端 /******************************************************************** * 项目名称 ...
- RSA原理、ssl认证、Tomcat中配置数字证书以及网络传输数据中的密码学知识
情形一:接口的加.解密与加.验签 rsa不是只有加密解密,除此外还有加签和验签.之前一直误以为加密就是加签,解密就是验签.这是错误的! 正确的理解是: 数据传输的机密性:公钥加密私钥解密是密送,保 ...
- HTTPS 中双向认证SSL 协议的具体过程
HTTPS 中双向认证SSL 协议的具体过程: 这里总结为详细的步骤: ① 浏览器发送一个连接请求给安全服务器.② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.③ 客户浏览器检查服务器送 ...
- java实现ssl单/双向认证通信[推荐]
java实现ssl单/双向认证通信[推荐] 学习了:https://blog.csdn.net/zbuger/article/details/51695582 学习了:https://www.cnbl ...
- Tomcat 实现双向SSL认证
大概思路: 使用openssl生产CA证书,使用keytool生产密钥库 实验环境:RHEL6.4+Tomcat8 一.生成CA根证书,并自签名 1.生成CA密钥 # genrsa [产生密钥命令] ...
- JAVA中发送电子邮件的方法
JAVA中发送邮件的方法不复杂,使用sun的JavaMail的架包就可以实现. 一.下载JavaMail的架包,并导入项目中,如下: 二.附上代码例子,如下: 1.在main函数中对各项参数进行赋值 ...
- Apollo单向SSL认证(1)
参考链接:https://www.cnblogs.com/benwu/articles/4891758.html keytool -genkey -alias mybroker -keyalg RSA ...
- 所有和Java中代理有关的知识点都在这了。
对于每一个Java开发来说,代理这个词或多或少都会听说过.你可能听到过的有代理模式.动态代理.反向代理等.那么,到底什么是代理,这么多代理又有什么区别呢.本文就来简要分析一下. 代理技术,其实不只是J ...
- 如何使用Java访问双向认证的Https资源
本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 0.Nginx配置Https双向认证 首先配置Https双向认证的服务器资源. ...
随机推荐
- 自定义控件(视图)2期笔记05:自定义控件之继承自View(滑动开关)
1. 开关按钮点击效果,如下: 2. 继承已有View实现自定义View 3. 下面通过一个案例实现滑动开关的案例: (1)新建一个新的Android工程,命名为" 开关按钮", ...
- Android(java)学习笔记256:JNI之NDK的概念
1.交叉编译 (1)概念 在一个平台(硬件)和os(软件)环境下,编译出另一种平台和os下可以运行的二进制代码. e.g: 电脑端 ...
- Java基础知识强化22:Java中数据类型转换
数据类型转换: (1). 自动转换 低级变量可以直接转换为高级变量,这叫自动类型转换.比如: byte b: int b: long b: float b: double b: 上面的语句可 ...
- this computer does not support Intel Virtualization Technology (VT-x) .Haxm can'not be installed
this computer does not support Intel Virtualization Technology (VT-x) .Haxm can'not be installed 本机不 ...
- 关于EditText组件在android4.4W中出现黄色感叹号的问题?
今天用eclipse编写android4.4W的项目,在XML中用到了EditText组件来写文本框,结果出现了黄色感叹号,还出现一句 This text field does not specify ...
- ASP.NET 文本编辑器使用(CKEditor)与上传图片
CKEditor是什么 CKEidtor是一个在线富文本编辑器,可以将让用户所见即所得的获得编辑在线文本,编辑器或自动将用户编辑的文字格式转换成html代码. 方法一.在ASP.NET工程中添加CKE ...
- linux初识-01简介
什么是linux: Linux是一个自由的,免费的,源码开发的操作系统Linux的特点: 开放性.多用户,多任务,具有丰富的网络功能 可靠的系统安全 良好的可移植性 良好的用户界面(命令界面和图形界面 ...
- ValidateCode.cs验证码时设置缓存的使用
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...
- AJAX快速上手
创建XMLHttpRequest对象 xmlHttp = new XMLHttpRequest(); xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); ...
- str_repeat() 函数
<?php echo str_repeat(".",13);//重复几次 ?>