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

SSL双向通信

 
阅读更多

keytool操作步骤:

1. 分别生成客户端和服务器端密钥库

keytool -genkey -alias server1 -keysize 2048 -validity 3650 -keyalg RSA -dname "CN=ABC, OU=BetterWood CA,  O=ABC Inc, L=BeiJing, S=BeiJing, C=CN" -keypass abcdef1 -storepass 2014server -keystore e:/keystore/server1.jks

 

keytool -genkey -alias client1 -keysize 2048 -validity 3650 -keyalg RSA -dname "CN=ABC, OU=BetterWood CA,  O=ABC Inc, L=BeiJing, S=BeiJing, C=CN" -keypass abcdef2 -storepass 2014client -keystore e:/keystore/client1.jks

 

2将服务器和客户端的公钥导出成证书

keytool -exportcert -alias server1 -file e:\keystore\ssl_1.cer -keystore e:\keystore\server1.jks -storepass 2014server

 

keytool -exportcert -alias client1 -file e:\keystore\ssl_2.cer -keystore e:\keystore\client1.jks -storepass 2014client

 

3 交换证书,导入到各自的密钥库

keytool -importcert -alias server1 -file e:\keystore\ssl_1.cer -keystore e:\keystore\client1.jks -storepass 2014client -keypass abcdef2

 

keytool -importcert -alias client1 -file e:\keystore\ssl_2.cer -keystore e:\keystore\server1.jks -storepass 2014server -keypass abcdef1

 

服务端代码:

package com.keystore;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
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.TrustManagerFactory;

/**
 * 双向SSL认证: 服务器端
 */
public class BothwayServer {

	public static void main(String[] args) {

		try {
			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
			KeyStore ks = KeyStore.getInstance("JKS");
			ks.load(new FileInputStream("e:/keystore/server1.jks"),
					"2014server".toCharArray());
			kmf.init(ks, "abcdef1".toCharArray());

			KeyStore tks = KeyStore.getInstance("JKS");
			tks.load(new FileInputStream("e:/keystore/server1.jks"),
					"2014server".toCharArray());
			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance("SunX509");
			tmf.init(tks);

			SSLContext ctx = SSLContext.getInstance("SSL");
			ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

			SSLServerSocket serverSocket = (SSLServerSocket) ctx
					.getServerSocketFactory().createServerSocket(26666);
			serverSocket.setNeedClientAuth(true);
			Socket ssls = serverSocket.accept();

			// 以下代码同socket通讯实例中的代码
			BufferedReader socketIn = new BufferedReader(new InputStreamReader(
					ssls.getInputStream()));
			BufferedReader userIn = new BufferedReader(new InputStreamReader(
					System.in));

			PrintStream socketOut = new PrintStream(ssls.getOutputStream());
			String s;
			while (true) {
				System.out.println("等待客户端的请求数据..");
				System.out.println("");
				s = socketIn.readLine().trim();
				if (s != null && !s.equals("")) {
					System.out.println("客户端发来的消息: " + s);
					if (s.trim().equalsIgnoreCase("BYE")) {
						break;
					}
				}

				System.out.print("服务器发出去的消息............ ");
				s = userIn.readLine();
				if (s != null && !s.equals("")) {
					socketOut.println(s);
					if (s.trim().equalsIgnoreCase("BYE")) {
						break;
					}
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

客户端代码: 

package com.keystore;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.security.KeyStore;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManagerFactory;

/**
 * 双向SSL通信
 */
public class BothwayClient {

	public static void main(String[] args) {
		try {
			KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
			KeyStore ks = KeyStore.getInstance("JKS");
			ks.load(new FileInputStream("e:/keystore/client1.jks"),
					"2014client".toCharArray());
			kmf.init(ks, "abcdef2".toCharArray());

			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance("SunX509");
			KeyStore tks = KeyStore.getInstance("JKS");
			tks.load(new FileInputStream("e:/keystore/client1.jks"),
					"2014client".toCharArray());
			tmf.init(tks);

			SSLContext context = SSLContext.getInstance("SSL");
			context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

			SSLSocket csocket = (SSLSocket) context.getSocketFactory()
					.createSocket("localhost", 26666);

			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("客户端发出去的消息: ");
				s = userIn.readLine();
				if (s != null && !s.equals("")) {
					socketOut.println(s);

					if (s.trim().equalsIgnoreCase("BYE")) {
						break;
					} else {
						System.out.println("Please wait Server Message..");
						System.out.println("");
					}
				}

				s = socketIn.readLine();
				if (s != null && !s.equals("")) {
					System.out.println("服务器发过来的消息: " + s);
					if (s.trim().equalsIgnoreCase("BYE")) {
						break;
					}
				}
			}

			socketIn.close();
			socketOut.close();
			userIn.close();
			csocket.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

分享到:
评论

相关推荐

    tomcat android 双向ssl通信

    ##### 二、Tomcat的PC版SSL双向配置步骤 1. **生成密钥**:创建服务端与客户端的公钥和私钥,这是SSL通信中保证数据安全的关键。 2. **证书交换**:客户端将证书导出并被服务端信任。服务端需要将客户端证书加入到...

    SSL双向认证握手过程 非常详细

    SSL双向认证握手过程是SSL/TLS协议中的一种身份验证机制,用于确保客户端和服务器之间的通信安全。本文将详细介绍SSL双向认证握手过程的每个步骤,并解释相关的数据结构和加密算法。 第一步:ClientHello 在SSL...

    Weblogic配置SSL双向认证

    Weblogic 配置 SSL 双向认证 Weblogic 配置 SSL 双向认证是为了确保 Web 应用程序的安全性和加密性。SSL(Secure Sockets Layer)是用于加密 Internet 通信的安全协议。双向认证是指客户端和服务端都需要验证对方的...

    SSL双向认证SSL双向认证

    在SSL双向认证过程中,以下是一些重要的知识点: 1. **证书与身份验证**:在SSL连接建立时,双方都需要提供数字证书来证明自己的身份。服务器的证书通常由权威的证书颁发机构(CA)签发,而客户端的证书可能由内部...

    ssl双向认证 ,客户端c代码

    包括了如何使用openssl指令生成客户端-服务端的证书和密钥,以及使用openssl自带server端来实现简单的ssl双向认证,client端代码中也做了相应的标注和说明,提供编译的Makefile.希望对开始学习如何使用openssl进行...

    Java ssl socket 双向认证

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

    Java实现SSL双向认证的方法

    Java中的SSL双向认证是一种安全通信机制,用于确保服务器和客户端之间的通信不仅加密,而且双方的身份都得到验证。这种机制在需要高安全性交互的应用场景中,如金融交易、企业内部网络通信等,尤其重要。 SSL...

    WEB服务器SSL双向认证

    ### WEB服务器SSL双向认证知识点详解 #### 一、SSL双向认证概述 - **定义**: SSL双向认证是指在SSL/TLS连接建立过程中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份。这种验证机制通过数字证书...

    android 使用HttpsURLConnection方式的SSL双向认证

    此项目“android 使用HttpsURLConnection方式的SSL双向认证”着重讲解了如何在Android应用中通过HttpsURLConnection实现SSL的客户端和服务器端之间的双向身份验证,确保通信的隐私和完整性。 首先,我们需要理解SSL...

    SSL双向认证证书制作过程流程

    SSL双向认证证书制作过程主要涉及网络安全领域,尤其是用于保护网络通信的安全套接层(SSL)和传输层安全(TLS)协议。这些协议确保了数据在互联网上传输时的加密和完整性,防止中间人攻击和数据泄露。以下是SSL双向...

    通过tomcat实现SSL双向认证

    通过 Tomcat 实现 SSL 双向认证 Tomcat 是一个流行的开源 Web 服务器,它支持 SSL/TLS 加密协议来确保数据传输的安全性。...配置 Tomcat 实现 SSL 双向认证可以提高数据传输的安全性,保护网络通信的安全。

    SSL双向验证范例

    而SSL双向验证,也称为客户端认证,是一种加强的安全措施,它不仅要求服务器向客户端证明其身份(即服务器证书验证),还要求客户端向服务器证明自己的身份(即客户端证书验证)。这种方式可以防止中间人攻击,增加...

    activemq ssl双向认证连接

    理解并正确配置SSL双向认证对于确保在ActiveMQ上的通信安全至关重要。由于这是一个涉及到多个步骤的过程,建议在每个环节都仔细检查,确保所有证书和配置都正确无误。如果在实施过程中遇到困难,不要犹豫寻求帮助,...

    netty的SSL双向认证

    在Netty中实现SSL双向认证,我们需要以下步骤: 1. **生成证书**:首先,为服务器和客户端分别生成数字证书。这通常包括创建私钥和公钥,然后使用证书签名请求(CSR)将公钥提交给受信任的证书颁发机构(CA)进行...

    java实现-SSL双向认证1.docx

    Java中的SSL双向认证是一种安全通信的方法,用于在网络中保护数据传输的安全性。它结合了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议,这些协议提供了数据加密、服务器验证以及客户端验证等...

    SSL双向认证.rar

    在SSL双向认证中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份,这种模式通常被称为“mutual authentication”或“two-way authentication”。 在SSL双向认证中,涉及以下关键知识点: 1. **...

    SSL双向认证java实现

    SSL 双向认证是指在客户端和服务器端之间的通信过程中,双方都需要对对方进行身份验证和授权,以确保通信的安全性。Java 语言提供了 JSSE(Java Security Socket Extension)来实现 SSL 双向认证。 JSSE 是 Sun ...

    客户端与服务器SSL双向认证(客户端:java-服务端:java)

    下面将详细介绍Java实现SSL双向认证的步骤、关键概念和技术要点。 1. **生成证书**: - 服务器证书:首先,你需要为服务器生成一个自我签名的证书,这可以通过Java的keytool工具完成。创建一个Key Pair(公钥和...

    IOS,Android SSL双向认证HTTPS方式请求及配置证书

    当涉及到SSL双向认证(Mutual TLS)时,这种安全性的要求进一步提升。本文将详细介绍如何在iOS和Android平台上实现SSL双向认证HTTPS请求,并配置相应的证书。 首先,理解SSL双向认证的概念。在单向认证中,服务器...

    SSL 双向认证的配置总结

    以下是对SSL双向认证的详细配置进行的总结。 **一、SSL简介** SSL是为网络通信提供安全及数据完整性的一种安全协议,通过加密传输数据,防止中间人攻击和窃听。其升级版TLS(Transport Layer Security)在当前的...

Global site tag (gtag.js) - Google Analytics