`

Java sslSocket 聊天实例

    博客分类:
  • java
阅读更多

-----------------------------------------------------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);

             }

      }

}

分享到:
评论
1 楼 HF_SKY000 2012-10-17  
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密码、密钥别名密码分别指什么?在哪里用得到?
三、密钥库文件应该是服务端提供给客户端(当然,你这里是在同一台电脑上),两端密钥库文件必须得相同吧?

相关推荐

    java https ssl 实例 例子

    Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...

    java_https_ssl

    Java sslSocket聊天实例 通过`SSLSocket`可以构建安全的聊天应用,确保通信双方的身份认证和消息安全。 用COMMVIEW工具截获浏览器访问支付宝的TCP/IP包 网络嗅探工具如CommView可以捕获网络流量,但无法解密HTTPS...

    java socket聊天室

    Java Socket聊天室是一种基于Java编程语言实现的网络通信应用,主要利用了Socket编程接口来创建客户端和服务器端的连接,从而实现数据的双向传输。在这个系统中,用户可以通过客户端发送消息,服务器端接收到消息后...

    Java Socket聊天和文件传输工具

    在这个"Java Socket聊天和文件传输工具"中,开发者利用Socket API创建了一个实用的工具,能够实现用户间的文本聊天功能以及文件的传输。虽然源代码未提供,但我们可以根据已知的信息探讨其背后的原理和技术要点。 1...

    java socket聊天程序,有界面

    Java Socket聊天程序是一种基于网络通信的软件应用,它利用了Java的Socket API来实现客户端与服务器之间的实时交互。在这个程序中,"有界面"意味着它不仅包含后台的网络通信逻辑,还具有用户友好的图形用户界面(GUI...

    java_socket_chat.rar_java socket聊天

    Java Socket聊天程序是一种基于Java语言实现的局域网内通信工具,主要利用Socket类进行网络数据传输,实现客户端与服务器端的实时交互。这个简单的聊天程序仅支持文字发送,不包含图片、音频或其他多媒体文件的传输...

    JAVA Socket聊天程序

    Java Socket聊天程序是一种基于TCP/IP协议的网络通信应用,它允许两台计算机通过网络进行双向通信。在Java中,Socket是实现客户端-服务器模型的基本工具,它可以用来构建各种复杂的网络服务,例如聊天应用程序。 ...

    JavaTCP-Socket.zip_JAVA socket编程_java socket _socket 聊天

    本篇将深入探讨Java Socket编程及其在构建聊天应用中的应用。 首先,我们要了解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据包按照顺序发送,并且在接收端按顺序接收,...

    java实现socket编程网络通信多人聊天室

    当有客户端连接时,ServerSocket会为每个连接创建一个新的Socket实例,这样服务器就可以同时处理多个客户端的连接,实现多用户同时在线聊天。 1. **服务器端实现**: - 创建ServerSocket对象,指定监听的端口号。 ...

    java socket 聊天室

    Java Socket聊天室是一种基于Java编程语言实现的网络通信应用,它允许用户通过图形用户界面(GUI)进行实时的文本交流。在这个项目中,Swing库被用来构建用户友好的交互界面,而Socket则作为底层通信机制,实现了...

    Java基于socket的进程间通信 聊天小程序

    在这个场景下,我们讨论的是一个简单的聊天小程序,它利用了Java的Socket库来搭建客户端与服务器之间的桥梁,实现数据的实时交互。下面将详细阐述相关知识点。 1. **Java Socket**: Java的Socket类是TCP/IP协议的...

    flex java socket 文字聊天

    Flex Java Socket文字聊天是一种基于Adobe Flex前端技术和Java后端Socket通信技术实现的实时文本聊天应用。这个应用允许用户通过网络进行双向通信,提供了一个简单但功能完备的平台,让用户能够发送和接收即时消息。...

    java socket多人聊天(文字+图片+文件)

    在"java socket多人聊天(文字+图片+文件)"这个项目中,开发者创建了一个支持多用户同时在线聊天的系统,不仅可以发送文字消息,还能交换图片和文件。以下是关于这个项目的一些关键知识点和实现细节: 1. **Socket...

    Socket通信_java仿qq聊天_java_javasocket_javaqq_socket视频_

    在这个"Java仿QQ聊天"项目中,我们利用TCP协议建立可靠的连接,通过Java Socket API来模拟QQ聊天的功能,包括视频聊天和私聊。以下是这个项目涉及到的一些关键知识点: 1. **TCP协议**:TCP(Transmission Control ...

    1.5Java聊天室的设计与实现socket_聊天室_java_socket_

    Java聊天室的设计与实现主要基于Socket编程,这是网络通信的核心技术。Socket在Java中提供了低级别的、面向连接的、基于TCP/IP的通信机制,使得应用程序能够通过网络进行双向通信。本设计旨在创建一个简单的多人在线...

    JAVA的Socket的聊天器

    在本“JAVA的Socket的聊天器”项目中,我们将深入探讨如何利用Java的Socket实现一个简单的聊天应用。 首先,我们需要了解Socket的基本概念。Socket在Java中被定义为`java.net.Socket`类,它代表了网络上两个进程间...

    java上socket通信即时通信界面本

    这可以通过使用`SSLSocket`和`SSLServerSocket`实现。 综上所述,"java上socket通信即时通信界面本"项目涵盖了Java网络编程的基本元素,包括Socket通信、GUI设计以及多线程处理。通过这个项目,你可以学习到如何...

    java 聊天实例 使用GUI

    Java聊天实例是一个基于图形用户界面(GUI)的应用程序,它允许用户通过本地网络或互联网进行交互式的文本聊天。在这个实例中,我们主要关注的是Java编程语言如何与GUI库结合,创建一个用户友好的聊天应用程序。Java...

Global site tag (gtag.js) - Google Analytics