Java中的SSL/TLS安全通信实现
Java中的SSL/TLS安全通信实现
大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Java中实现SSL/TLS安全通信。
一、什么是SSL/TLS
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用于在网络中进行安全通信的协议。它们通过加密数据来保护信息的完整性和机密性,防止中间人攻击和数据篡改。
二、准备工作
在开始之前,需要确保已经生成了SSL证书。可以使用Java自带的keytool命令生成自签名证书:
keytool -genkeypair -alias mykey -keyalg RSA -keystore keystore.jks -storepass password
三、创建SSLContext
在Java中,SSLContext类用于管理SSL/TLS协议相关的配置。下面是一个示例代码,展示如何创建和初始化SSLContext:
package cn.juwatech.security;import javax.net.ssl.SSLContext;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import java.security.KeyStore;
import java.io.FileInputStream;public class SSLContextInitializer {public static SSLContext createSSLContext(String keystoreFile, String keystorePassword) throws Exception {// 加载密钥库KeyStore keyStore = KeyStore.getInstance("JKS");try (FileInputStream keyStoreStream = new FileInputStream(keystoreFile)) {keyStore.load(keyStoreStream, keystorePassword.toCharArray());}// 初始化KeyManagerFactoryKeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());keyManagerFactory.init(keyStore, keystorePassword.toCharArray());// 初始化TrustManagerFactoryTrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());trustManagerFactory.init(keyStore);// 初始化SSLContextSSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);return sslContext;}
}
四、创建SSLServerSocket
使用SSLServerSocket来创建安全的服务器端Socket。下面是一个简单的SSL服务器示例:
package cn.juwatech.security;import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class SecureServer {public static void main(String[] args) throws Exception {SSLContext sslContext = SSLContextInitializer.createSSLContext("keystore.jks", "password");SSLServerSocketFactory serverSocketFactory = sslContext.getServerSocketFactory();try (SSLServerSocket serverSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(8443)) {System.out.println("SSL Server started");while (true) {try (SSLSocket clientSocket = (SSLSocket) serverSocket.accept()) {BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);String inputLine;while ((inputLine = in.readLine()) != null) {System.out.println("Received: " + inputLine);out.println("Echo: " + inputLine);}}}}}
}
五、创建SSLSocket客户端
客户端使用SSLSocket连接到SSL服务器,下面是一个简单的SSL客户端示例:
package cn.juwatech.security;import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class SecureClient {public static void main(String[] args) throws Exception {SSLContext sslContext = SSLContextInitializer.createSSLContext("keystore.jks", "password");SSLSocketFactory socketFactory = sslContext.getSocketFactory();try (SSLSocket socket = (SSLSocket) socketFactory.createSocket("localhost", 8443)) {PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));String userInput;while ((userInput = stdIn.readLine()) != null) {out.println(userInput);System.out.println("Echo from server: " + in.readLine());}}}
}
六、配置双向认证(可选)
如果需要双向认证(客户端和服务器相互验证),需要在客户端也配置KeyManager,并在服务器端配置TrustManager。具体实现如下:
package cn.juwatech.security;import javax.net.ssl.SSLContext;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import java.security.KeyStore;
import java.io.FileInputStream;public class SSLContextInitializer {public static SSLContext createSSLContext(String keystoreFile, String keystorePassword, String truststoreFile, String truststorePassword) throws Exception {// 加载密钥库KeyStore keyStore = KeyStore.getInstance("JKS");try (FileInputStream keyStoreStream = new FileInputStream(keystoreFile)) {keyStore.load(keyStoreStream, keystorePassword.toCharArray());}// 加载信任库KeyStore trustStore = KeyStore.getInstance("JKS");try (FileInputStream trustStoreStream = new FileInputStream(truststoreFile)) {trustStore.load(trustStoreStream, truststorePassword.toCharArray());}// 初始化KeyManagerFactoryKeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());keyManagerFactory.init(keyStore, keystorePassword.toCharArray());// 初始化TrustManagerFactoryTrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());trustManagerFactory.init(trustStore);// 初始化SSLContextSSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);return sslContext;}
}
总结
本文介绍了如何在Java中实现SSL/TLS安全通信,包括生成证书、创建SSLContext、SSL服务器和SSL客户端。通过这些步骤,可以确保数据在传输过程中是加密和安全的。
本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!
相关文章:
Java中的SSL/TLS安全通信实现
Java中的SSL/TLS安全通信实现 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Java中实现SSL/TLS安全通信。 一、什么是SSL/TLS SSL(Secure Sockets La…...
2959. 关闭分部的可行集合数目
2959. 关闭分部的可行集合数目 题目链接:2959. 关闭分部的可行集合数目 代码如下: //参考链接:https://leetcode.cn/problems/number-of-possible-sets-of-closing-branches/solutions/2844227/guan-bi-fen-bu-de-ke-xing-ji-he-shu-mu-b-85ov class S…...
第十九天培训笔记
上午 1 、构建 vue 发行版本 [rootserver eleme_web]# nohup npm run serve& // 运行 vue 项目 [rootserver eleme_web]# mkdir /eleme [rootserver eleme_web]# cp -r /root/eleme_web/dist/* /eleme/ // 将项目整体 移动到 /eleme 目录下 [rootserver eleme_web]# …...
初学者编程指南:方法与资源推荐
一、引言 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?编程不仅是技术领域的一项基本技能&#…...
【SpringBoot】数据验证之URL参数校验
URL参数校验 Validated public class UserController{ RequestMapping("/query"); public String query(Length(min2,max10,message"姓名长度错误,姓名长度2-10!") RequestParam(name"name",requiredtrue)String name…...
目标检测 | yolov2/yolo9000 原理和介绍
前言:目标检测 | yolov1 原理和介绍 简介 论文链接:https://arxiv.org/abs/1612.08242 时间:2016年 作者:Joseph Redmon 作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法&#…...
基于Raft算法的分布式KV数据库:一、开篇
项目描述:本项目是基于Raft算法的分布式KV数据库,保证了分布式系统的数据一致性和分区容错性,在少于半数节点发生故障时仍可对外提供服务。使用个人实现的分布式通信框架mpRPC和跳表数据库skipList提供RPC服务和KV存储服务。 github地址&…...
react-日期选择器封装
文件 import { useMemo, useState, useEffect } from "react" import dayjs, { Dayjs } from "dayjs" import "dayjs/locale/zh-cn" import "./App.css" dayjs.locale("zh-cn")function SimpleCalendar() {// 当前时间对象…...
【C++题解】1022. 百钱百鸡问题
欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1022. 百钱百鸡问题 类型:嵌套穷举 题目描述: 用 100 元钱买 100 只鸡,公鸡,母鸡,小鸡都要有。 公鸡 5 元 1 只&#x…...
计算机毕业设计选题推荐-二手闲置交易系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
AI Agents(智能代理)教程:如何创建信息检索聊天机器人
AI 代理教程:如何创建信息检索聊天机器人 介绍 在本教程中,我们将指导您使用 AI 代理创建用于信息检索的复杂聊天机器人的过程。探索如何利用 AI 的强大功能构建能够高效地从各种来源检索数据的聊天机器人。 设置环境 我们的计划是使用 AI 代理&…...
Linux——管理本地用户和组(详细介绍了Linux中用户和组的概念及用法)
目录 一、用户和组概念 (一)、用户的概念 (二)、组的概念 补充组 主要组 二、获取超级用户访问权限 (一)、su 命令和su -命令 ( 二)、sudo命令 三、管理本地用户账户 &…...
Flink-StarRocks详解:第三部分StarRocks分区分桶(第53天)
文章目录 前言2.3 数据分布2.3.1 数据分布概览2.3.1.1 常见的数据分布方式2.3.1.2 StarRocks的数据分布方式2.3.1.3 分区2.3.1.4 分桶 2.3.2 创建分区2.3.2.1 表达式分区2.3.2.1.1 时间函数表达式分区(自v3.1)2.3.2.1.2 列表达式分区(自v3.1&…...
8G内存的Mac够用吗 ?苹果电脑内存满了怎么清理?可以有效地管理和优化你的Mac电脑内存,确保设备运行流畅
嘿,朋友们,让咱们聊聊怎么让我们的Mac小伙伴时刻保持巅峰状态吧!想象一下,每一次点击、每一次滑动,都如同初见时那般丝滑顺畅,是不是超级心动?为了这份持久的畅快体验,我强烈推荐大家…...
【LabVIEW学习篇 - 10】:属性、调用节点
文章目录 属性节点调用节点使用方法一使用方法二案例 练习 属性节点 LabVIEW中的对象(包括控件、VI、应用程序等)都有自己的属性和方法。属性就是对象与生俱来的一些特性,可以理解成它是静态的,如控件的背景颜色,坐标…...
如何在数据埋点中发现和修复数据上报逻辑错误
如何发现和处理数据埋点中的逻辑错误 在大数据分析中,数据埋点是至关重要的一环。然而,当我们遇到数据上报逻辑错误时,该如何应对呢?本文将为你揭示解决这一棘手问题的有效方法。 目录 如何发现和处理数据埋点中的逻辑错误什么是数据上报逻辑错误?如何发现数据上报逻辑错误…...
程序员面试“八股文”:助力成长还是应试枷锁?
程序员面试“八股文”:助力成长还是应试枷锁? 引言 在当今快速迭代的IT行业中,程序员面试作为选拔人才的关键环节,其内容与形式一直备受关注。其中,“八股文”式面试题,作为一类标准化、模式化的问题集合…...
强化学习-alphazero 算法理论
一、算法简介 简单地说,AlphazeroMCTS SL(策略网络价值网络) Selfplay resnet。 其中MCTS指的是蒙特卡洛树搜索,主要用于记录所有访问过的棋盘状态的各种属性,包括该状态访问次数,对该状平均评价分数等。 SL指监督学习算法&…...
使用 Rough.js 创建动态水平条形图
本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Rough.js 创建动态可视化网络图 应用场景 Rough.js 是一个 JavaScript 库,它允许开发人员使用毛边风格创建可视化效果。该库适用于各种应用程序,例如: 数据可视化地图…...
Python教程(十):面向对象编程(OOP)
目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程(一…...
掌握Nemo文件管理器:Cinnamon桌面环境的高效文件管理利器
掌握Nemo文件管理器:Cinnamon桌面环境的高效文件管理利器 【免费下载链接】nemo File browser for Cinnamon 项目地址: https://gitcode.com/gh_mirrors/ne/nemo Nemo作为Cinnamon桌面环境的默认文件管理器,不仅仅是一个简单的文件浏览器…...
抖音视频智能管理:如何通过批量下载与自动化分类实现90%效率提升
抖音视频智能管理:如何通过批量下载与自动化分类实现90%效率提升 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在短视频内容爆炸的时代,高效的视频采集、批量下载与系统化内容管理已…...
模拟地和数字地到底怎么接?从ADC设计误区讲起,用磁珠还是直接铺铜?
数模混合电路设计中的地平面处理:从ADC噪声抑制到系统级EMC优化 1. 数模混合电路的接地困局:当磁珠成为噪声放大器 在24位ADC采样电路中,工程师老张遇到了一个诡异现象:当输入信号低于1mV时,采集数据会出现周期性毛刺。…...
Llama-3.2V-11B-cot入门必看:Streamlit组件热重载加速UI迭代开发
Llama-3.2V-11B-cot入门必看:Streamlit组件热重载加速UI迭代开发 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B多模态大模型开发的高性能视觉推理工具,专为双卡4090环境深度优化。该工具通过Streamlit框架构建了直观易用的交互界面&#…...
OpenClaw安全加固指南:nanobot镜像的防火墙与权限配置
OpenClaw安全加固指南:nanobot镜像的防火墙与权限配置 1. 为什么需要安全加固? 当我第一次在本地部署OpenClaw时,最让我忐忑不安的就是安全问题。这个能操控我鼠标键盘、读写文件的AI助手,会不会不小心删掉我的重要文档…...
2. Linux桌面环境介绍
2. Liunx桌面环境介绍 桌面介绍终端设置 设置终端属性:字体快捷键: 新建终端(ctrlaltN)新建标签(ctrlaltT)背景和锁屏设置语言和输入法设置课后作业 系统开机、关机账户的注销、锁屏打开常用程序࿰…...
GitHub Desktop汉化终极指南:如何让英文界面瞬间变成中文
GitHub Desktop汉化终极指南:如何让英文界面瞬间变成中文 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的英文界面而头疼吗…...
HP-Socket开发者技能认证考试大纲更新全指南:周期解析与参与攻略
HP-Socket开发者技能认证考试大纲更新全指南:周期解析与参与攻略 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket作为高性能TCP/UDP/HTTP通信组件&…...
MAA明日方舟自动化助手:5分钟快速上手指南
MAA明日方舟自动化助手:5分钟快速上手指南 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights MAA(MaaAssistantArknights)是一款专为《明日方…...
零售店长必看:如何用iBeacon+微信小程序打造低成本智能导购(2024最新方案)
零售店长必看:如何用iBeacon微信小程序打造低成本智能导购(2024最新方案) 走进任何一家现代零售门店,你可能会注意到顾客们不再茫然地寻找商品,而是自然地掏出手机,接收个性化的商品推荐和促销信息。这种无…...
