`
spdx4046
  • 浏览: 47005 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SSL+socket

    博客分类:
  • java
 
阅读更多
Java代码 复制代码 收藏代码
  1. 服务器端代码:  
服务器端代码:
Java代码 复制代码 收藏代码
  1. import java.net.*;   
  2. import javax.net.ssl.*;   
  3. import java.io.*;   
  4. import java.security.*;   
  5.   
  6. public class SSLServer {   
  7.   
  8.     private static int port = 50003;   
  9.     private static SSLServerSocket server;   
  10.   
  11.     public static void initSSLServerSocket() {   
  12.         try {   
  13.             /** 要使用的证书名 **/  
  14.             String cert = "\\key.cert";   
  15.             /** 要使用的证书密码 **/  
  16.             char certPass[] = "123456".toCharArray();   
  17.             /** 证书别称所使用的主要密码 **/  
  18.             char certAliaMainPass[] = "123456".toCharArray();   
  19.             /** 创建JKS密钥库 **/  
  20.             KeyStore keyStore = KeyStore.getInstance("JKS");   
  21.             keyStore.load(new FileInputStream(cert), certPass);   
  22.             /** 创建管理JKS密钥库的X.509密钥管理器 **/  
  23.             KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");   
  24.             keyManagerFactory.init(keyStore, certAliaMainPass);   
  25.             SSLContext sslContext = SSLContext.getInstance("TLSV1");   
  26.             /** 想使用SSL时,更改成如下,注释部分 **/  
  27.             //SSLContext sslContext = SSLContext.getInstance("SSLV3");   
  28.             sslContext.init(keyManagerFactory.getKeyManagers(), nullnull);   
  29.             SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();   
  30.             server = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);   
  31.         } catch (Exception e) {   
  32.             e.printStackTrace();   
  33.         }   
  34.   
  35.     }   
  36.   
  37.     public static void main(String args[]) {   
  38.         try {   
  39.             initSSLServerSocket();   
  40.             System.out.println("服务器在端口 [" + port + "] 等待连接...");   
  41.             while (true) {   
  42.                 SSLSocket socket = (SSLSocket) server.accept();   
  43.                 new CreateThread(socket);   
  44.             }   
  45.         } catch (Exception e) {   
  46.             e.printStackTrace();   
  47.         }   
  48.     }   
  49. }   
  50.   
  51. class CreateThread extends Thread {   
  52.     private static BufferedReader in;   
  53.     private static PrintWriter out;   
  54.     private static Socket s;   
  55.   
  56.     public CreateThread(Socket socket) {   
  57.         try {   
  58.             s = socket;   
  59.             in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));   
  60.             out = new PrintWriter(s.getOutputStream(), true);   
  61.             start();   
  62.         } catch (Exception e) {   
  63.             e.printStackTrace();   
  64.         }   
  65.   
  66.     }   
  67.   
  68.     public void run() {   
  69.         try {   
  70.             String msg = in.readLine();   
  71.             System.out.println("接收到: " + msg);   
  72.             out.write("服务器接收到的信息是: " + msg);   
  73.             out.flush();   
  74.             s.close();   
  75.         } catch (Exception e) {   
  76.             e.printStackTrace();   
  77.         }   
  78.     }   
  79. }  
import java.net.*;
import javax.net.ssl.*;
import java.io.*;
import java.security.*;

public class SSLServer {

	private static int port = 50003;
	private static SSLServerSocket server;

	public static void initSSLServerSocket() {
		try {
			/** 要使用的证书名 **/
			String cert = "\\key.cert";
			/** 要使用的证书密码 **/
			char certPass[] = "123456".toCharArray();
			/** 证书别称所使用的主要密码 **/
			char certAliaMainPass[] = "123456".toCharArray();
			/** 创建JKS密钥库 **/
			KeyStore keyStore = KeyStore.getInstance("JKS");
			keyStore.load(new FileInputStream(cert), certPass);
			/** 创建管理JKS密钥库的X.509密钥管理器 **/
			KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
			keyManagerFactory.init(keyStore, certAliaMainPass);
			SSLContext sslContext = SSLContext.getInstance("TLSV1");
			/** 想使用SSL时,更改成如下,注释部分 **/
			//SSLContext sslContext = SSLContext.getInstance("SSLV3");
			sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
			SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
			server = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static void main(String args[]) {
		try {
			initSSLServerSocket();
			System.out.println("服务器在端口 [" + port + "] 等待连接...");
			while (true) {
				SSLSocket socket = (SSLSocket) server.accept();
				new CreateThread(socket);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class CreateThread extends Thread {
	private static BufferedReader in;
	private static PrintWriter out;
	private static Socket s;

	public CreateThread(Socket socket) {
		try {
			s = socket;
			in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
			out = new PrintWriter(s.getOutputStream(), true);
			start();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void run() {
		try {
			String msg = in.readLine();
			System.out.println("接收到: " + msg);
			out.write("服务器接收到的信息是: " + msg);
			out.flush();
			s.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

Java代码 复制代码 收藏代码
  1. import java.net.*;   
  2. import javax.net.ssl.*;   
  3. import java.io.*;   
  4.   
  5. public class SSLClient {   
  6.   
  7.     static int port = 50003;   
  8.   
  9.     public static void main(String args[]) {   
  10.         try {   
  11.             SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();   
  12.             Socket s = factory.createSocket("192.168.12.41", port);   
  13.             BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));   
  14.             PrintWriter out = new PrintWriter(s.getOutputStream(), true);   
  15.             out.println("证书启用成功!");   
  16.             System.out.println(in.readLine());   
  17.             out.close();   
  18.             s.close();   
  19.         } catch (Exception e) {   
  20.             e.printStackTrace();   
  21.         }   
  22.     }   
  23. }  
import java.net.*;
import javax.net.ssl.*;
import java.io.*;

public class SSLClient {

	static int port = 50003;

	public static void main(String args[]) {
		try {
			SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
			Socket s = factory.createSocket("192.168.12.41", port);
			BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "GB2312"));
			PrintWriter out = new PrintWriter(s.getOutputStream(), true);
			out.println("证书启用成功!");
			System.out.println(in.readLine());
			out.close();
			s.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 服务器启动:java SSLServer
            key.cert 文件需要和 SSLServer.class 同一目录下

客户端运行:java -Djavax.net.ssl.trustStore=key.cert SSLClient

           这个客户端就是运行不成功,不知道是目录错误还是别的。

 这样运行最方便:把证书拷贝到java home/lib/security目录下,名字改为jssecacerts,然后可以直接执行客户端:

    本人测试过没问题。

key文件生成:keytool -genkey -keystore Key.cert -keyalg rsa –alias tempkey
或者: keytool -genkey -alias tempkey -keysize 512 -validity 3650 -keyalg RSA -dname "CN=sariel.iteye.com, OU=sariel CA,  O=sariel Inc, L=Stockholm, S=Stockholm, C=SE" -keypass 123456 -storepass 123456 -keystore key.cert

分享到:
评论

相关推荐

    SSL+socket 详解-概念

    5. 通过SSLContext获取SSLServerSocketFactory或SSLSocketFactory来创建SSLServerSocket或SSLSocket,进行安全的通信。 由于SSL/TLS协议的复杂性,开发人员在使用JSSE进行SSL/TLS编程时需要深入理解相关的加密原理...

    Mina+Socket通信

    Mina支持多种协议,如TCP、UDP以及SSL/TLS加密,因此它非常适合用于构建如FTP服务器、HTTP服务器、数据库连接等。 Socket,又称套接字,是操作系统提供的一个编程接口,用于不同进程之间的网络通信。在Java中,`...

    js+socket实现web通讯

    在现代Web开发中,为了实现实时双向通信,JavaScript结合Socket技术(通常指的是WebSocket协议)成为一种常见且强大的解决方案。WebSocket是HTML5引入的一个新特性,允许服务器和浏览器之间建立长时间保持连接的通道...

    MyC++Socket

    除了基本的网络通信功能,MyC++Socket还支持多线程处理客户端连接、异步I/O、SSL加密等高级特性,能够满足复杂网络应用的需求。 总结,MyC++Socket库为C++程序员提供了强大的网络编程工具,通过封装底层细节,使得...

    易语言SSL_Socket通信模块源码

    《易语言SSL_Socket通信模块源码解析与应用》 在信息技术日新月异的今天,网络通信的安全性越来越受到重视。SSL(Secure Sockets Layer)协议作为网络安全传输的重要手段,广泛应用于各种网络服务中。易语言,作为...

    python socket通讯+socket+socket

    - 对于敏感数据的传输,可以考虑使用SSL/TLS加密,Python的`ssl`模块提供了相关的支持。 10. **实际应用**: - 这种客户端-服务端-触发端的架构常见于即时通讯、消息推送系统、分布式任务调度等场景。通过socket...

    部署haproxy+ssl+keepalived

    SSL(Secure Socket Layer)确保了数据传输的安全性;而Keepalived则提供故障切换和高可用性,确保服务不间断运行。接下来,我们将详细探讨这三个组件及其部署过程。 **Haproxy** Haproxy是一款开源的负载均衡器,...

    Java中SSLSocket应用教程和代码

    在Java编程语言中,SSLSocket(Secure Sockets Layer Socket)是用于实现安全网络通信的重要组件,它基于SSL/TLS协议栈,为应用程序提供加密的数据传输服务。本教程将深入探讨Java中的SSLSocket应用,包括其基本概念...

    Ubutu+Linux+Apache +php+Socket 编程

    在Ubuntu系统中,可以通过Apt轻松安装Apache,并配置虚拟主机、SSL证书、重写规则等,以支持动态内容和静态资源的高效分发。 3. PHP: PHP(Hypertext Preprocessor)是一种广泛应用的开源脚本语言,主要用于Web...

    编译好的libcurl+ssl+zlib

    2. **ssl**:这里的ssl通常指的是OpenSSL,一个用于加密通信的库,支持SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议。它为libcurl提供了安全的加密连接,保证了数据传输的安全性。 3. **zlib*...

    SSL-Socket-Client_socket实现https_socketssl_SSLSOCKET_https_

    6. **连接SSL**:将SSL结构体与Socket绑定,使用`SSL_set_fd()`函数设置Socket描述符。然后,调用`SSL_connect()`来建立SSL连接,这会进行SSL握手,包括证书交换、密钥协商等。 7. **发送和接收数据**:SSL连接建立...

    Java+TCP/IP+Socket编程++原书第2版

    10. **SSL/TLS安全通信**:对于涉及敏感信息的网络通信,Java提供了JSSE(Java Secure Socket Extension)框架,可以实现基于SSL或TLS的安全套接字连接,确保数据的加密传输。 总的来说,《Java+TCP/IP+Socket编程+...

    JAVA+Socket教程

    3. **安全性**:使用SSL/TLS协议可以为Socket通信提供加密,确保数据安全。 4. **NIO(非阻塞I/O)**:Java NIO库提供了非阻塞的I/O操作,适用于高并发的Socket通信场景。 5. **缓冲区管理**:使用ByteBuffer等NIO...

    Z00433+Java+TCP+IP+Socket编程++原书第2版

    - 安全性方面,可以使用SSL/TLS协议实现安全套接字,保护数据传输的安全。 7. **实战应用** - Java网络编程常用于开发Web应用、分布式系统、文件传输、在线游戏等。 - 实现服务器与客户端之间的实时通信,如聊天...

    Java SSLSocket的使用

    在Java编程中,`SSLSocket`是用于创建安全套接层(SSL)或传输层安全(TLS)连接的重要类,它提供了加密的数据传输服务,确保了网络通信的安全性。`SSLSocket`是Java标准库`javax.net.ssl`包的一部分,主要应用于...

    SSLSocket通信Demo android版

    SSLSocket(Secure Socket Layer Socket)是一种基于SSL协议的安全通信机制,能够提供端到端的数据加密,确保数据在网络传输过程中的安全性。本教程主要针对初学者,详细讲解如何在Android应用中实现SSLSocket通信,...

    cocos2d-x + socket

    7. **安全通信**:如果涉及到敏感数据的传输,如用户认证信息,需要使用SSL/TLS加密以保证数据的安全性。 在提供的文件列表中: - `readme.doc`可能是项目说明文档,包含了如何集成和使用这个socket封装的具体步骤...

    基于ssl的Java的socket网络通信

    SSLSocket socket = (SSLSocket) sf.createSocket("server_address", server_port); ``` 然后,我们可以通过SSLSocket进行正常的Socket通信,包括输入流和输出流的读写。在开始通信之前,会进行SSL握手,这是一个...

    利用C#实现SSLSocket加密通讯的方法详解

    「C#实现SSLSocket加密通讯方法详解」 在网络通讯中,安全性是一个非常重要的方面,而SSL/TLS协议则是最常用的加密通讯协议之一。C#作为一个强大的编程语言,可以轻松地实现SSL/TLS协议的加密通讯。下面将详细介绍...

    Java ssl socket 双向认证

    Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...

Global site tag (gtag.js) - Google Analytics