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的PC版SSL双向配置步骤 1. **生成密钥**:创建服务端与客户端的公钥和私钥,这是SSL通信中保证数据安全的关键。 2. **证书交换**:客户端将证书导出并被服务端信任。服务端需要将客户端证书加入到...
SSL双向认证握手过程是SSL/TLS协议中的一种身份验证机制,用于确保客户端和服务器之间的通信安全。本文将详细介绍SSL双向认证握手过程的每个步骤,并解释相关的数据结构和加密算法。 第一步:ClientHello 在SSL...
Weblogic 配置 SSL 双向认证 Weblogic 配置 SSL 双向认证是为了确保 Web 应用程序的安全性和加密性。SSL(Secure Sockets Layer)是用于加密 Internet 通信的安全协议。双向认证是指客户端和服务端都需要验证对方的...
在SSL双向认证过程中,以下是一些重要的知识点: 1. **证书与身份验证**:在SSL连接建立时,双方都需要提供数字证书来证明自己的身份。服务器的证书通常由权威的证书颁发机构(CA)签发,而客户端的证书可能由内部...
包括了如何使用openssl指令生成客户端-服务端的证书和密钥,以及使用openssl自带server端来实现简单的ssl双向认证,client端代码中也做了相应的标注和说明,提供编译的Makefile.希望对开始学习如何使用openssl进行...
Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...
Java中的SSL双向认证是一种安全通信机制,用于确保服务器和客户端之间的通信不仅加密,而且双方的身份都得到验证。这种机制在需要高安全性交互的应用场景中,如金融交易、企业内部网络通信等,尤其重要。 SSL...
### WEB服务器SSL双向认证知识点详解 #### 一、SSL双向认证概述 - **定义**: SSL双向认证是指在SSL/TLS连接建立过程中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份。这种验证机制通过数字证书...
此项目“android 使用HttpsURLConnection方式的SSL双向认证”着重讲解了如何在Android应用中通过HttpsURLConnection实现SSL的客户端和服务器端之间的双向身份验证,确保通信的隐私和完整性。 首先,我们需要理解SSL...
SSL双向认证证书制作过程主要涉及网络安全领域,尤其是用于保护网络通信的安全套接层(SSL)和传输层安全(TLS)协议。这些协议确保了数据在互联网上传输时的加密和完整性,防止中间人攻击和数据泄露。以下是SSL双向...
通过 Tomcat 实现 SSL 双向认证 Tomcat 是一个流行的开源 Web 服务器,它支持 SSL/TLS 加密协议来确保数据传输的安全性。...配置 Tomcat 实现 SSL 双向认证可以提高数据传输的安全性,保护网络通信的安全。
而SSL双向验证,也称为客户端认证,是一种加强的安全措施,它不仅要求服务器向客户端证明其身份(即服务器证书验证),还要求客户端向服务器证明自己的身份(即客户端证书验证)。这种方式可以防止中间人攻击,增加...
理解并正确配置SSL双向认证对于确保在ActiveMQ上的通信安全至关重要。由于这是一个涉及到多个步骤的过程,建议在每个环节都仔细检查,确保所有证书和配置都正确无误。如果在实施过程中遇到困难,不要犹豫寻求帮助,...
在Netty中实现SSL双向认证,我们需要以下步骤: 1. **生成证书**:首先,为服务器和客户端分别生成数字证书。这通常包括创建私钥和公钥,然后使用证书签名请求(CSR)将公钥提交给受信任的证书颁发机构(CA)进行...
Java中的SSL双向认证是一种安全通信的方法,用于在网络中保护数据传输的安全性。它结合了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议,这些协议提供了数据加密、服务器验证以及客户端验证等...
在SSL双向认证中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份,这种模式通常被称为“mutual authentication”或“two-way authentication”。 在SSL双向认证中,涉及以下关键知识点: 1. **...
SSL 双向认证是指在客户端和服务器端之间的通信过程中,双方都需要对对方进行身份验证和授权,以确保通信的安全性。Java 语言提供了 JSSE(Java Security Socket Extension)来实现 SSL 双向认证。 JSSE 是 Sun ...
下面将详细介绍Java实现SSL双向认证的步骤、关键概念和技术要点。 1. **生成证书**: - 服务器证书:首先,你需要为服务器生成一个自我签名的证书,这可以通过Java的keytool工具完成。创建一个Key Pair(公钥和...
当涉及到SSL双向认证(Mutual TLS)时,这种安全性的要求进一步提升。本文将详细介绍如何在iOS和Android平台上实现SSL双向认证HTTPS请求,并配置相应的证书。 首先,理解SSL双向认证的概念。在单向认证中,服务器...
以下是对SSL双向认证的详细配置进行的总结。 **一、SSL简介** SSL是为网络通信提供安全及数据完整性的一种安全协议,通过加密传输数据,防止中间人攻击和窃听。其升级版TLS(Transport Layer Security)在当前的...