- 浏览: 315021 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (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 1534最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下 ... -
Java安全通信:HTTPS与SSL
2014-04-18 17:37 6581. HTTPS概念 1)简介 ... -
Java KeyStore的类型
2014-04-18 15:05 832JKS和JCEKS是Java密钥库(KeyStore)的两种 ... -
对https的理解
2014-03-20 11:39 1816一、什么是HTTPS在说HTTPS之前先说说什么是HTTP ... -
BigDecimal四舍五入的问题
2013-03-15 10:33 970System.out.println(new BigDec ... -
java正则表达式
2012-08-28 11:34 1143在Sun的Java JDK 1.40版本中 ... -
JAVA中使用FTPClient实现文件上传下载
2012-08-24 15:48 803在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上 ... -
java 数字签名
2012-08-07 11:04 1178发送报文时,发送方用 ... -
Java进行数据加密
2012-06-26 16:41 914本文主要谈一下密码学 ... -
常见加密算法
2012-06-26 16:24 1012DES(Data Encryption Standard):对 ... -
消息摘要
2012-06-26 16:22 831消息摘要(Message Digest)又称为数字摘要(D ... -
UML 依赖 关联 聚合 组合
2012-06-25 09:54 1288<1>依赖 依赖关系用虚线加箭头表示,如图所示: ... -
keytool证书与密钥管理
2012-06-18 10:44 14711)创建服务端密钥库 > ... -
Java ssl socket 双向认证
2012-06-18 10:37 1624总体思路步骤是 1. 分别生成客户端何服务器端 ... -
从JKS文件中读取密钥
2012-06-17 23:45 1696JKS文件是一个java中的密钥管理库,里面可以放各种密钥文件 ... -
JAVA String.format 方法使用介绍
2012-06-13 16:51 761JAVA String.format 方法使用 ... -
HttpUrlConnection使用
2011-11-10 17:46 3894下边的总结对我帮助蛮大的~不仅用法了解,整个连接流程也要明 ... -
java i/o
2010-07-16 14:33 842java.io在Java类库中,IO部分的内容是很庞大的,因为 ...
相关推荐
Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...
Java sslSocket聊天实例 通过`SSLSocket`可以构建安全的聊天应用,确保通信双方的身份认证和消息安全。 用COMMVIEW工具截获浏览器访问支付宝的TCP/IP包 网络嗅探工具如CommView可以捕获网络流量,但无法解密HTTPS...
Java Socket聊天室是一种基于Java编程语言实现的网络通信应用,主要利用了Socket编程接口来创建客户端和服务器端的连接,从而实现数据的双向传输。在这个系统中,用户可以通过客户端发送消息,服务器端接收到消息后...
在这个"Java Socket聊天和文件传输工具"中,开发者利用Socket API创建了一个实用的工具,能够实现用户间的文本聊天功能以及文件的传输。虽然源代码未提供,但我们可以根据已知的信息探讨其背后的原理和技术要点。 1...
Java Socket聊天程序是一种基于网络通信的软件应用,它利用了Java的Socket API来实现客户端与服务器之间的实时交互。在这个程序中,"有界面"意味着它不仅包含后台的网络通信逻辑,还具有用户友好的图形用户界面(GUI...
Java Socket聊天程序是一种基于Java语言实现的局域网内通信工具,主要利用Socket类进行网络数据传输,实现客户端与服务器端的实时交互。这个简单的聊天程序仅支持文字发送,不包含图片、音频或其他多媒体文件的传输...
Java Socket聊天程序是一种基于TCP/IP协议的网络通信应用,它允许两台计算机通过网络进行双向通信。在Java中,Socket是实现客户端-服务器模型的基本工具,它可以用来构建各种复杂的网络服务,例如聊天应用程序。 ...
本篇将深入探讨Java Socket编程及其在构建聊天应用中的应用。 首先,我们要了解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据包按照顺序发送,并且在接收端按顺序接收,...
当有客户端连接时,ServerSocket会为每个连接创建一个新的Socket实例,这样服务器就可以同时处理多个客户端的连接,实现多用户同时在线聊天。 1. **服务器端实现**: - 创建ServerSocket对象,指定监听的端口号。 ...
Java Socket聊天室是一种基于Java编程语言实现的网络通信应用,它允许用户通过图形用户界面(GUI)进行实时的文本交流。在这个项目中,Swing库被用来构建用户友好的交互界面,而Socket则作为底层通信机制,实现了...
在这个场景下,我们讨论的是一个简单的聊天小程序,它利用了Java的Socket库来搭建客户端与服务器之间的桥梁,实现数据的实时交互。下面将详细阐述相关知识点。 1. **Java Socket**: Java的Socket类是TCP/IP协议的...
Flex Java Socket文字聊天是一种基于Adobe Flex前端技术和Java后端Socket通信技术实现的实时文本聊天应用。这个应用允许用户通过网络进行双向通信,提供了一个简单但功能完备的平台,让用户能够发送和接收即时消息。...
在"java socket多人聊天(文字+图片+文件)"这个项目中,开发者创建了一个支持多用户同时在线聊天的系统,不仅可以发送文字消息,还能交换图片和文件。以下是关于这个项目的一些关键知识点和实现细节: 1. **Socket...
在这个"Java仿QQ聊天"项目中,我们利用TCP协议建立可靠的连接,通过Java Socket API来模拟QQ聊天的功能,包括视频聊天和私聊。以下是这个项目涉及到的一些关键知识点: 1. **TCP协议**:TCP(Transmission Control ...
Java聊天室的设计与实现主要基于Socket编程,这是网络通信的核心技术。Socket在Java中提供了低级别的、面向连接的、基于TCP/IP的通信机制,使得应用程序能够通过网络进行双向通信。本设计旨在创建一个简单的多人在线...
在本“JAVA的Socket的聊天器”项目中,我们将深入探讨如何利用Java的Socket实现一个简单的聊天应用。 首先,我们需要了解Socket的基本概念。Socket在Java中被定义为`java.net.Socket`类,它代表了网络上两个进程间...
这可以通过使用`SSLSocket`和`SSLServerSocket`实现。 综上所述,"java上socket通信即时通信界面本"项目涵盖了Java网络编程的基本元素,包括Socket通信、GUI设计以及多线程处理。通过这个项目,你可以学习到如何...
Java聊天实例是一个基于图形用户界面(GUI)的应用程序,它允许用户通过本地网络或互联网进行交互式的文本聊天。在这个实例中,我们主要关注的是Java编程语言如何与GUI库结合,创建一个用户友好的聊天应用程序。Java...