写道
总体思路步骤是
1. 分别生成客户端和服务器端密钥库
keytool -genkey -keystore E:\server.jks -keyalg rsa -alias ssl_1 -validity 700
keytool -genkey -keystore E:\client.jks -keyalg rsa -alias ssl_2 -validity 700
2将服务器和客户端的公钥导出成证书
keytool -export -alias ssl_1 -file e:\ssl_1.cer -keystore e:\server.jks
keytool -export -alias ssl_2 -file e:\ssl_2.cer -keystore e:\client.jks
3 交换证书 导入到各自的密钥库
keytool -import -file e:\ssl_1.cer -keystore e:\client.jks
keytool -import -file e:\ssl_2.cer -keystore e:\server.jks
1. 分别生成客户端和服务器端密钥库
keytool -genkey -keystore E:\server.jks -keyalg rsa -alias ssl_1 -validity 700
keytool -genkey -keystore E:\client.jks -keyalg rsa -alias ssl_2 -validity 700
2将服务器和客户端的公钥导出成证书
keytool -export -alias ssl_1 -file e:\ssl_1.cer -keystore e:\server.jks
keytool -export -alias ssl_2 -file e:\ssl_2.cer -keystore e:\client.jks
3 交换证书 导入到各自的密钥库
keytool -import -file e:\ssl_1.cer -keystore e:\client.jks
keytool -import -file e:\ssl_2.cer -keystore e:\server.jks
public class BothwayServer { public static void main(String[] args) { // TODO Auto-generated method stub try { SSLContext ctx = SSLContext.getInstance("SSL"); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); KeyStore ks = KeyStore.getInstance("JKS"); KeyStore tks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("e:/server.jks"),"changeit".toCharArray()); tks.load(new FileInputStream("e:/server.jks"),"changeit".toCharArray()); kmf.init(ks, "changeit".toCharArray()); tmf.init(tks); 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(); } } }
public class BothwayClient { public static void main(String[] args) { // TODO Auto-generated method stub try { SSLContext context = SSLContext.getInstance("SSL"); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); KeyStore ks = KeyStore.getInstance("JKS"); KeyStore tks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("e:/client.jks"), "changeit".toCharArray()); tks.load(new FileInputStream("e:/client.jks"),"changeit".toCharArray()); kmf.init(ks, "changeit".toCharArray()); tmf.init(tks); 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(); } } }
相关推荐
Java中的SSL双向认证是一种安全通信机制,用于确保服务器和客户端之间的通信不仅加密,而且双方的身份都得到验证。这种机制在需要高安全性交互的应用场景中,如金融交易、企业内部网络通信等,尤其重要。 SSL...
SSL Socket双向认证的实现 SSL 协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传输过程中...
"ssl_client"和"ssl_server"是Java源代码文件,它们包含了实现SSLSocket双向认证的逻辑。在这些代码中,客户端会加载"ejbcakclient.jks",服务器则加载"ejbcakserver.jks"。客户端在建立连接时,不仅会提供自己的...
Java sslSocket 聊天实例是使用 Java 的 SSL SOCKET 编程来实现安全聊天室功能的示例程序。 十二、用 COMMVIEW 工具截获浏览器访问支付宝的 TCP/IP 包 COMMVIEW 是一个网络嗅探工具,能够截获网络数据包。在本实例...
使用SSLSocket,客户端和服务器可以进行双向身份验证,确保双方都是可信的。 3. **SSLSocket的工作流程** - **握手过程**:建立连接时,客户端和服务器会进行SSL握手,其中包括证书交换、加密算法协商等步骤。 - ...
Java SSLSocket是Java平台中用于处理安全套接字层(SSL)或传输层安全(TLS)协议的类,它是Socket类的一个子类,提供了在客户端和服务器之间进行加密通信的能力。SSL和TLS协议主要用于保护网络数据传输,防止数据被...
4. **客户端实现**:对应的`TeslaSSLClient`类则需要配置SSLSocket,同样使用自定义的`SSLContext`。客户端在建立连接时会提供自己的证书。 5. **测试**:在完成上述步骤后,你可以使用wss(WebSocket Secure)协议...
SSL 双向认证 Java 实现 SSL 双向认证是指在客户端和服务器端之间的通信过程中,双方都需要对对方进行身份验证和授权,以确保通信的安全性。Java 语言提供了 JSSE(Java Security Socket Extension)来实现 SSL ...
4. **Java代码实现**:在Java中,可以使用JSSE(Java Secure Socket Extension)来配置SSL上下文并创建SSLServerSocket或SSLSocket。在服务器端,需要设置KeyManagerFactory和TrustManagerFactory,它们分别处理...
- 配置SSLSocket:通过SSLContext的getSocketFactory()方法创建SSLSocket,连接到服务器。 4. **握手过程**: - 客户端初始化SSL连接,发送其证书和公钥给服务器。 - 服务器验证客户端的证书,如果接受,则发送...
JAVA SSL SOCKET双向认证 双向认证即客户端和服务器都需要验证对方的身份,这在某些场景下是必要的,例如企业内部系统或高安全要求的B2B通信。 总结,HTTPS通过SSL/TLS协议提供了网络通信的安全保障,包括数据加密...
SSL(Secure Socket Layer)是用于确保网络通信安全的一种标准协议,而双向认证(Mutual SSL/TLS Authentication)则进一步增强了这种安全性,它要求服务器验证客户端的身份,同时也要求客户端验证服务器的身份。...
SSL(Secure Socket Layer)双向认证是一种安全通信协议,它不仅要求服务器验证客户端的身份,同时也要求客户端验证服务器的身份。这种机制增强了网络通信的安全性,尤其在金融、医疗等对数据安全有高要求的领域中...
在Java中实现SSL双向认证,也被称为mutual authentication,是指客户端和服务器都需要向对方证明自己的身份。以下将详细讲解这个过程及其相关的Java SSL包使用。 首先,了解SSL的工作流程。SSL握手过程通常包括以下...
在SSL双向认证中,不仅服务器需要验证客户端的身份,客户端也需要验证服务器的身份,从而提供了更高级别的安全保护。这种模式通常在银行、企业内部网络或高度敏感的信息交换中使用。 在SSL双向认证中,涉及的主要...
双向认证,也称为mutual SSL或Client-Auth,是SSL/TLS协议的一个特性,它要求客户端和服务器都提供身份验证,以增强安全性。 在Netty中实现SSL双向认证,我们需要以下步骤: 1. **生成证书**:首先,为服务器和...
在Java中,`javax.net.ssl`包提供了实现SSL通信的核心类和接口,如`SSLSocketFactory`、`SSLSocket`、`SSLServerSocketFactory`、`SSLServerSocket`以及`TrustManager`和`KeyManager`等。 1. **SSLSocketFactory和...
本示例将深入探讨如何使用Tomcat搭建SSL(Secure Socket Layer)双向认证环境,以及通过Java原生类库SSLSocket进行编程,以及使用Apache的Httpclient库模拟安全的客户端请求。以下是对这些知识点的详细讲解。 首先...
本篇文章将深入探讨如何利用Netty实现HTTPS的双向认证(也称为SSL/TLS的客户端身份验证)以及白名单证书验证。 首先,我们需要理解HTTPS的工作原理。HTTPS基于HTTP协议,通过SSL/TLS层提供加密传输和服务器身份验证...