写道
总体思路步骤是
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(); } } }
相关推荐
SSL Socket双向认证的实现.doc
SSLSocket双向认证通信示例(含证书库及证书),自己编写的可使用的代码按钮,此代码中含将服务端证书及CA证书自动下载并导入到客户端证书库的功能。
主要介绍了Java实现SSL双向认证的方法,实例分析了ssl认证的原理与相关实现技巧,需要的朋友可以参考下
SSL双向认证SSL双向认证
java实现_SSL双向认证,里面详细介绍怎样实现,还包括完整的实现代码,直接可用
压缩包里有客户端源码和服务器端源码,支持TCP的双向认证,也支持WEBSOCKET的双向认证,内附测试 wss的测试例子, 需要生成PKCS12的证书,导入浏览器才可以测试。
NULL 博文链接:https://410063005.iteye.com/blog/1751243
java实现SSL的双向认证.模拟场景: Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。
客户端与服务器SSL双向认证(客户端:java-服务端:java):详细的过程,注意事项,运行成功!
C# TLS SSL TCP双向认证 X509Store SslStream Certificate Visual Studio 2017 命令提示 键入: makecert -r -pe -n “CN=TestServer” -ss Root -sky exchange 等待来自客户端的连接... 显示安全等级 密钥套件: Aes...
主要介绍了详解Nginx SSL快速双向认证配置(脚本),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java环境中配置SSL双向认证。在Java环境中配置Https双向认证,需要使用JDK自带的keytool工具,在命令行方式下,生成服务器证书申请文CSR,然后到CA签发服务器证书。
一个netty建立的SSL双向加密的服务器和客户端的简单示例。工程是IDEA创建的,直接导入即可,注意需要依赖的pom文件中的包。需要的证书文件示例也在压缩包内。
以实际的测试数据为例,分析了GMSSL双向认证的过程。 包含认证证书解析、认证算法,包含国密算法SM2、SM3、SM4在TLS双向认证过程中的使用等。 GMSSL代码为开源的,因此分析中也描述了一些在分析双向认证中涉及的开源...
java android 的ssl socket通讯,X509运行
这是我实战的笔记,全程直播。 #### Tomcat和Openssl构建HTTPS双向认证 ###### ...二、tomcat实现双向认证 1、创建服务器信任的CA证书库 2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)
详细介绍了java如何使用SSL来进行socket通信了 最主要的是介绍了如何使用keytool来生成.keystore文件 ps:设置一分是希望那些刚入门或则对csdn访问不多的朋友 多花点时间 表面上市搞积分 事实上是有帮助的。 如果你...
java实现 SSL双向认证,java ssl包使用