1. SSLServer.java
package ssl; import java.io.FileInputStream; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.security.KeyStore; import java.util.logging.Logger; import javax.net.ServerSocketFactory; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocket; public class SSLServer { private String SERVER_KEY_STORE = "/D:/Projects/J2EE/JDK/src/ssl/keystore/server_ks"; private String SERVER_KEY_STORE_PASSWORD = "123123"; private Logger logger = Logger.getLogger(this.getClass().getName()); private SSLServerSocket createSSLServerSocket() throws Exception{ // whether enable the debug mode System.setProperty("javax.net.debug", "ssl,handshake"); System.setProperty("javax.net.ssl.trustStore", SERVER_KEY_STORE); SSLContext context = SSLContext.getInstance("TLS"); KeyStore ks = KeyStore.getInstance("jceks"); ks.load(new FileInputStream(SERVER_KEY_STORE), null); KeyManagerFactory kf = KeyManagerFactory.getInstance("SunX509"); kf.init(ks, SERVER_KEY_STORE_PASSWORD.toCharArray()); context.init(kf.getKeyManagers(), null, null); ServerSocketFactory factory = context.getServerSocketFactory(); ServerSocket serverSocket = factory.createServerSocket(8443); SSLServerSocket sslServerSocket = (SSLServerSocket) serverSocket; // set whether need the client authentication // sslServerSocket.setNeedClientAuth(true); return sslServerSocket; } private void start() throws Exception{ SSLServerSocket sslServerSocket= createSSLServerSocket(); while(true){ try{ Socket socket = sslServerSocket.accept(); InputStream is = socket.getInputStream(); byte[] bytes = new byte[Short.MAX_VALUE]; int len = -1; while((len = is.read(bytes))>0){ logger.info(new String(bytes,0,len)); if(len<bytes.length){ break; } } socket.getOutputStream().write("server balabala ... ".getBytes()); socket.close(); }catch(Exception e){ e.printStackTrace(); } } } public static void main(String[] args)throws Exception { new SSLServer().start(); } }
2. SSLClient.java
package ssl; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.security.KeyStore; import java.util.logging.Logger; import javax.net.SocketFactory; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; public class SSLClient { private static String CLIENT_KEY_STORE = "/D:/Projects/J2EE/JDK/src/ssl/keystore/client_ks"; private static String CLIENT_KEY_STORE_PASSWORD = "456456"; private Logger logger = Logger.getLogger(this.getClass().getName()); private Socket createNonAuthenticationSocket()throws Exception{ System.setProperty("javax.net.ssl.trustStore", CLIENT_KEY_STORE); SocketFactory sf = SSLSocketFactory.getDefault(); Socket s = sf.createSocket("localhost", 8443); return s; } private Socket createAuthenticationSocket() throws Exception{ System.setProperty("javax.net.ssl.trustStore", CLIENT_KEY_STORE); SSLContext context = SSLContext.getInstance("TLS"); KeyStore ks = KeyStore.getInstance("jceks"); ks.load(new FileInputStream(CLIENT_KEY_STORE), null); KeyManagerFactory kf = KeyManagerFactory.getInstance("SunX509"); kf.init(ks, CLIENT_KEY_STORE_PASSWORD.toCharArray()); context.init(kf.getKeyManagers(), null, null); SocketFactory factory = context.getSocketFactory(); Socket s = factory.createSocket("localhost", 8443); return s; } private void connect()throws Exception{ Socket s = createNonAuthenticationSocket(); // Socket s = createAuthenticationSocket(); PrintWriter writer = new PrintWriter(s.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())); writer.println("hello"); writer.flush(); logger.info(reader.readLine()); s.close(); } public static void main(String[] args) throws Exception { new SSLClient().connect(); } }
PS : 解压 client_server_keystore.rar, 然后分别拷贝到指定的如下位置.
SERVER_KEY_STORE = "/D:/Projects/J2EE/JDK/src/ssl/keystore/server_ks",
CLIENT_KEY_STORE = "/D:/Projects/J2EE/JDK/src/ssl/keystore/client_ks".
然后分别运行SSLServer,SSLClient。
更过可参考如下:
相关推荐
换句话说,一个简单的库允许程序员使用与用于纯文本的标准套接字API相同的标准套接字API来实现TLS,就像OpenSSL对于C,仅用于Java一样,填补了标准库中一个特别痛苦的缺失功能。主要特点实现 , 和 ,这是由实现的...
这是一个基于spingBoot的项目,通过此项目可以实现对fabric网络的简单调用,并且可以启动一个fabric网路的服务,直接在网页上调用. 搭建流程,首先需要fabric1.4的网络, 1进入-first-network目录,修改byfn.sh中...
Mikrotik RouterOS API的Java客户端库实现。 该项目提供了一个Java客户端,可以使用远程API来操纵Mikrotik路由器。 简单的事情必须容易做,而复杂的事情必须是可能的。 版本号 当前的稳定是3.0.7 3.0.7修复了使用and...
Mikrotik RouterOS API的Java客户端库实现。 该项目提供了一个Java客户端,可以使用远程API来操纵Mikrotik路由器。 简单的事情必须容易做,而复杂的事情必须是可能的。 版本号 当前的稳定版本是3.0.7 3.0.7版...
这些新功能和改进使得Java编程变得更加简单、直观和高效,并提升了JVM的性能和稳定性。此外,Java 8还引入了一些安全性和性能方面的改进,例如强制默认的TLS协议、元空间代替永久代等。 1. Lambda表达式 Lambda...
**基于Java的两个通用安全模块的设计与实现** 本资源提供了一个完整的Java毕业设计项目,涵盖了两个通用安全模块的设计与实现。项目采用最新的Java技术栈,结合先进的加密算法和网络安全策略,为Java应用提供了强大...
基于java-sdk实现的简单示例, invoke,query, 创建channel亲测可用, 安装和实例化链码还不能用,此版本是开启TLS的 , 使用方式可以参考https://blog.csdn.net/qq_27348837/article/details/88354838,不成功的可以联系...
android-async-tls-socket 简单易用的异步套接字从 Android 手机建立 TLS 连接。 由于缺乏在 Android 上实现这一目标的简单快速方法而感到沮丧,而 Android 的重点似乎只放在 https 上。 而 SSLEngine 似乎有点...
- Swing开发,CardLayout, Custom UI, Layout技巧 - Swing开发中如何实现MVC - SMTP协议,Socket编程技巧 - SSL, TLS简单原理知识
安全性:Minio提供了多种安全机制来保护数据的机密性和完整性,包括SSL/TLS加密、访问控制和数据加密等。 多语言支持:Minio支持多种编程语言,包括Java、Python、Ruby和Go等。 社区支持:Minio是一个开源项目,...
InstallCerts是一个简单的 cli 工具,用于通过检索服务器的 TLS 证书来创建 trustStore。 您可以使用 using 和 java 命令实现相同的效果,但InstallCerts使用单个命令使其完全自动化。 下载 二进制 下载后,请确保...
合金弹头java简单源码真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 批处理文件 - 在 WSL 上发现的问题 脑残 -用brainfuck编写的brainfuck编译器 C - s6 监督套件。 - 跨平台多协议 VPN 软件。 欢迎拉取请求。...
安全性:Minio提供了多种安全机制来保护数据的机密性和完整性,包括SSL/TLS加密、访问控制和数据加密等。 多语言支持:Minio支持多种编程语言,包括Java、Python、Ruby和Go等。 社区支持:Minio是一个开源项目,...
java一个对象笔试题 啜饮 概述 Belle-sip 是一个实现 SIP (RFC3261) 传输、事务和对话层的现代库。 它是用 C 语言编写的,具有面向对象的 API。 它还包括一个简单的 HTTP/HTTPS 客户端实现。 执照 版权所有 :...
1 支持SPDY,允许所有同一主机的...okhttp-urlconnection模块实现了都很熟悉的java.net.HttpURLConnection的API,okhttp-apache模块实现了Apache的HttpClient的API。OKHTTP支持Android2.3以上,Java支持最低版本1.7。
1 支持SPDY,允许所有同一主机的...okhttp-urlconnection模块实现了都很熟悉的java.net.HttpURLConnection的API,okhttp-apache模块实现了Apache的HttpClient的API。OKHTTP支持Android2.3以上,Java支持最低版本1.7。
java弹球游戏源码真棒星星系列 2020 内容 动作脚本 - 基于 Flash 的调色板生成应用程序,用于快速生成高质量的调色板文件。 - 一个简单的音乐制作程序 - Flash + AIR 音效发生器。 基于 Sfxr。 - 用于导入使用 ...
项目2:简单的FTP服务器,具有以下命令实现。 LS(列出所有文件)PWD(当前工作目录)CD(更改目录)PUT(从客户端获取文件并将其移至服务器的当前工作目录)GET(从客户端上的当前目录获取文件) 项目3:Simple ...
该项目提供了一个简单的作为SSO提供者的示例,并带有其他SSL客户端认证。 CAS是一个了不起的免费开放源代码解决方案,易于使用,文档完善且社区活跃。 另外,不要害怕调试其源代码以更好地理解。 UniconLabs 是我...