- 浏览: 303754 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (286)
- 设计模式 (14)
- spring (5)
- 开发工具 (12)
- java (19)
- apache.commons工具 (7)
- ibaits (5)
- extjs4.0 (4)
- 数据库 (2)
- spring工具类 (2)
- jquery1.8 (32)
- 杂记 (1)
- linux (2)
- Quart (1)
- springMVC (2)
- webservice (1)
- oracle (5)
- dwr (6)
- jbmp3 (27)
- lucene3.5 (27)
- javascript (18)
- hibernate3.3.2 (27)
- spring事务管理 (10)
- nio (2)
- strust2 (3)
- jvm (7)
- jquery-easyui-1.2.6 (22)
- 多线程 (14)
- maven (3)
- 常用正则表达式 (4)
最新评论
-
HF_SKY000:
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密 ...
Java sslSocket 聊天实例
-----------------------------------------------------server-------------------------------------------------
package com.test.http;
/*
*SSL Socket的服务器端
*@Author lixingang
*/
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
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;
public class SSLServer {
public static void startSSLServer() throws IOException {
int port = 16666;// 监听端口
String keyFile = "c:\\test\\serverkey.jks";// 密钥库文件
String keyFilePass = "changeit";// 密钥库的密码
String keyPass = "changeit";// 密钥别名的密码
SSLServerSocket sslsocket = null;// 安全连接套接字
KeyStore ks;// 密钥库
KeyManagerFactory kmf;// 密钥管理工厂
SSLContext sslc = null;// 安全连接方式
// 初始化安全连接的密钥
try {
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
// 创建管理JKS密钥库的X.509密钥管理器
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keyPass.toCharArray());
//构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用
sslc = SSLContext.getInstance("SSLv3");
//初始化SSL环境。第二个参数是告诉JSSE使用的可信任证书的来源,
//设置为null是从javax.net.ssl.trustStore中获得证书。第三个参数是JSSE生成的随机数,
//这个参数将影响系统的安全性,设置为null是个好选择,可以保证JSSE的安全性。
sslc.init(kmf.getKeyManagers(), null, null);
} catch (KeyManagementException ex) {
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 用安全连接的工厂来创建安全连接套接字
SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();
sslsocket = (SSLServerSocket) sslssf.createServerSocket();// 创建并进入监听
SocketAddress sa=new InetSocketAddress("localhost",port);
sslsocket.bind(sa);
System.out.println("Listening...");
SSLSocket ssocket = (SSLSocket) sslsocket.accept();// 接受客户端的连接
System.out.println("Server Connection OK~");
System.out.println("========================");
System.out.println("");
// 以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader(new InputStreamReader(
ssocket.getInputStream()));
BufferedReader userIn = new BufferedReader(new InputStreamReader(
System.in));
PrintStream socketOut = new PrintStream(ssocket.getOutputStream());
String s;
while (true) {
System.out.println("Please wait client 's message..");
System.out.println("");
s = socketIn.readLine();
System.out.println("Client Message: " + s);
if (s.trim().equals("BYE"))
break;
System.out.print("Server Message: ");
s = userIn.readLine();
socketOut.println(s);
if (s.trim().equals("BYE"))
break;
}
socketIn.close();
socketOut.close();
userIn.close();
sslsocket.close();
}
public static void main(String[] args) {
try {
startSSLServer();
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
-----------------------------------------------------client--------------------------------------------------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import javax.net.ssl.SSLSocketFactory;
public class SSLClient {
static int port = 16666;
public static void startSSLClient() throws IOException {
int port = 16666;// 要连接的服务器端口
String serverAdd = "localhost";// 要连接的服务器地址192.168.1.39
try {
System.setProperty("javax.net.ssl.trustStore", "c:\\test\\serverkey.jks");// 设置可信任的密钥仓库
System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); // 设置可信任的密钥仓库的密码
SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory
.getDefault();// 利用工厂来创建SSLSocket安全套接字
Socket csocket = sslsf.createSocket(serverAdd, port);// 创建并连接服务器
System.out.println("Client OK~");
System.out.println("===============");
System.out.println("");
// 以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader(new InputStreamReader(
csocket.getInputStream()));// 接受到的信息
PrintStream socketOut = new PrintStream(csocket.getOutputStream());// 要发送的信息
BufferedReader userIn = new BufferedReader(new InputStreamReader(
System.in));// 用户输入信息
String s;
while (true) {
System.out.print("Client Message: ");
s = userIn.readLine();
socketOut.println(s);
if (s.trim().equals("BYE"))
break;
else {
System.out.println("Please wait Server Message..");
System.out.println("");
}
s = socketIn.readLine();
System.out.println("Server Message: " + s);
if (s.trim().equals("BYE"))
break;
}
socketIn.close();
socketOut.close();
userIn.close();
csocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
startSSLClient();
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
评论
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密码、密钥别名密码分别指什么?在哪里用得到?
三、密钥库文件应该是服务端提供给客户端(当然,你这里是在同一台电脑上),两端密钥库文件必须得相同吧?
发表评论
-
http协议 文件下载原理及多线程断点续传
2014-06-18 17:28 1475最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下 ... -
Java安全通信:HTTPS与SSL
2014-04-18 17:37 6131. HTTPS概念 1)简介 ... -
Java KeyStore的类型
2014-04-18 15:05 795JKS和JCEKS是Java密钥库(KeyStore)的两种 ... -
对https的理解
2014-03-20 11:39 1772一、什么是HTTPS在说HTTPS之前先说说什么是HTTP ... -
BigDecimal四舍五入的问题
2013-03-15 10:33 936System.out.println(new BigDec ... -
java正则表达式
2012-08-28 11:34 1091在Sun的Java JDK 1.40版本中 ... -
JAVA中使用FTPClient实现文件上传下载
2012-08-24 15:48 783在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上 ... -
java 数字签名
2012-08-07 11:04 1133发送报文时,发送方用 ... -
Java进行数据加密
2012-06-26 16:41 873本文主要谈一下密码学 ... -
常见加密算法
2012-06-26 16:24 964DES(Data Encryption Standard):对 ... -
消息摘要
2012-06-26 16:22 795消息摘要(Message Digest)又称为数字摘要(D ... -
UML 依赖 关联 聚合 组合
2012-06-25 09:54 1233<1>依赖 依赖关系用虚线加箭头表示,如图所示: ... -
keytool证书与密钥管理
2012-06-18 10:44 13851)创建服务端密钥库 > ... -
Java ssl socket 双向认证
2012-06-18 10:37 1544总体思路步骤是 1. 分别生成客户端何服务器端 ... -
从JKS文件中读取密钥
2012-06-17 23:45 1618JKS文件是一个java中的密钥管理库,里面可以放各种密钥文件 ... -
JAVA String.format 方法使用介绍
2012-06-13 16:51 726JAVA String.format 方法使用 ... -
HttpUrlConnection使用
2011-11-10 17:46 3862下边的总结对我帮助蛮大的~不仅用法了解,整个连接流程也要明 ... -
java i/o
2010-07-16 14:33 808java.io在Java类库中,IO部分的内容是很庞大的,因为 ...
相关推荐
NULL 博文链接:https://1002878825-qq-com.iteye.com/blog/1838805
NULL 博文链接:https://410063005.iteye.com/blog/1751243
java android 的ssl socket通讯,X509运行
Java中SSLSocket应用教程和代码
主要给大家介绍了关于如何利用C#实现SSLSocket加密通讯的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
javax.net.ssl.SSLSocket类的使用。 下载cer.zip文件后解压,得到cer文件夹,该目录下有运行脚本,其中Test文件夹为java项目源码,直接导出到Eclipse。 SSLServer主类在com.csii.ssl包下,其它pack下的内容都用不到...
java https ssl 实例 例子
详细介绍了java如何使用SSL来进行socket通信了 最主要的是介绍了如何使用keytool来生成.keystore文件 ps:设置一分是希望那些刚入门或则对csdn访问不多的朋友 多花点时间 表面上市搞积分 事实上是有帮助的。 如果你...
具体事项请看根目录safejoin文件夹下的说明.txt文件
Secure Login based on SSL Server Socket.
这个是我通过学习总结的资料,介绍了如何SSLSocket的一些简单的知识,以及介绍了如何利用JDK自带的keytool工具生成密钥库、证书等,还有Demo作为例子,很好的学习资料。
Java中的SSL及HTTPS协议实例源码.rar Java写的ATM机取款模拟程序.zip Java写的一个mp3播放器.rar Java写的图片幻灯片切换特效.rar Java写的天气预报软件.rar Java写的巨型LCD液晶时钟显示屏.rar JAVA图书馆管理系统...
Java Socket 实现SMTP邮件发送,支持SSL/TSL
Java中的SSL及HTTPS协议实例源码
基于java的开发源码-SSL及HTTPS协议实例源码.zip 基于java的开发源码-SSL及HTTPS协议实例源码.zip 基于java的开发源码-SSL及HTTPS协议实例源码.zip 基于java的开发源码-SSL及HTTPS协议实例源码.zip 基于java的开发...
初学者必备,步骤完整,从证书制作到eclipse demo
NULL 博文链接:https://410063005.iteye.com/blog/1751938
SSLSOCKET demo 解决7.0认证失败 http://blog.csdn.net/zdy10326621/article/details/53744835
Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例...