【Netty】使用 SSL/TLS 加密 Netty 程序(二十)
文章目录
- 前言
- 一、SSL/TLS概述
- 二、Sslhandler类
前言
回顾Netty系列文章:
- Netty 概述(一)
- Netty 架构设计(二)
- Netty Channel 概述(三)
- Netty ChannelHandler(四)
- ChannelPipeline源码分析(五)
- 字节缓冲区 ByteBuf (六)(上)
- 字节缓冲区 ByteBuf(七)(下)
- Netty 如何实现零拷贝(八)
- Netty 程序引导类(九)
- Reactor 模型(十)
- 工作原理详解(十一)
- Netty 解码器(十二)
- Netty 编码器(十三)
- Netty 编解码器(十四)
- 自定义解码器、编码器、编解码器(十五)
- Future 源码分析(十六)
- Promise 源码分析(十七)
- 一行简单的writeAndFlush都做了哪些事(十八)
今天数据隐私是一个十分关注的问题,作为开发人员,我们需要准备好解决这个问题。至少我们需要熟悉加密协议 SSL 和 TLS 等之上的其他协议实现数据安全。作为一个 HTTPS 网站的用户,你是安全。当然,这些协议是广泛不基于 http 的应用程序,例如安全SMTP(SMTPS)邮件服务,甚至关系数据库系统。
为了支持 SSL/TLS,Java 提供了 javax.net.ssl API 的类SslContext 和 SslEngine 使它相对简单的实现解密和加密。Netty 的利用该 API 命名 SslHandler 的 ChannelHandler 实现,有一个内部 SslEngine 做实际的工作。
一、SSL/TLS概述
SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。
SSL/TLS 位于TCP层和应用层之间,具体如下图所示:

二、Sslhandler类
Sslhandler 继承自 ByteToMessageDecoder 并实现了 ChannelOutboundHandler 接口,因此可以像其他 ChannelHandler 一样添加到 ChannelPipeline 中,下图展示了 SslHandler 数据流图。

- 加密的入站数据被 SslHandler 拦截,进行解密。
- 前面加密的数据被 SslHandler 解密后,原始数据入站。
- 原始数据经过 SslHandler。
- SslHandler 加密数据并它传递出站。
以下为一个 SslHandler 使用 ChannelInitializer 添加到 ChannelPipeline 的示例。
public class SslChannelInitializer extends ChannelInitializer<Channel> {private final SslContext context;private final boolean startTls;public SslChannelInitializer(SslContext context,boolean client, boolean startTls) { //1this.context = context;this.startTls = startTls;}@Overrideprotected void initChannel(Channel ch) throws Exception {SSLEngine engine = context.newEngine(ch.alloc()); //2engine.setUseClientMode(client); //3ch.pipeline().addFirst("ssl", new SslHandler(engine, startTls)); //4}
}
- 使用构造函数来传递 SSLContext 用于使用(startTls 是否启用)。
- 从 SslContext 获得一个新的 SslEngine 。给每个 SslHandler 实例使用一个新的 SslEngine。
- 设置 SslEngine 是 client 或者是 server 模式。
- 添加 SslHandler 到 pipeline 作为第一个处理器。
在大多数情况下,SslHandler 将成为 ChannelPipeline 中的第一个 ChannelHandler 。这将确保所有其他 ChannelHandler 应用他们的逻辑到数据后加密后才发生,从而确保他们的变化是安全的。
SslHandler 有很多有用的方法,如下表所示。例如,在握手阶段两端相互验证,商定一个加密方法。你可以配置 SslHandler 修改其行为或提供 在SSL/TLS 握手完成后发送通知,这样所有数据都将被加密。 SSL/TLS 握手将自动执行。
| 姓名 | 描述 |
|---|---|
| setHandshakeTimeout(…) setHandshakeTimeoutMillis(…) getHandshakeTimeoutMillis() | 设置和获取超时,之后握手 ChannelFuture 被通知失败。setCloseNotifyTimeout(…) setCloseNotifyTimeoutMillis(…) getCloseNotifyTimeoutMillis() |
| 握手未来() | 返回一个 ChannelFuture,一旦握手完成,就会收到通知。如果握手之前完成,它将返回一个包含上次握手结果的 ChannelFuture。 |
| 关闭(…) | 发送 close_notify 请求关闭并销毁底层 SslEngine。 |
相关文章:
【Netty】使用 SSL/TLS 加密 Netty 程序(二十)
文章目录 前言一、SSL/TLS概述二、Sslhandler类 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHandler(四)ChannelP…...
runway gen2
来自Runway文生成视频ai大模型Gen-2_哔哩哔哩_bilibili来自Runway文生成视频ai大模型Gen-2,距离视频制作自由又近了一步。, 视频播放量 1651、弹幕量 0、点赞数 21、投硬币枚数 2、收藏人数 42、转发人数 22, 视频作者 旭升说, 作者简介 一起聊下互联网的那些事&…...
Day2:Windows网络编程-TCP
今天开始进入Windows网络编程的学习,在学习的时候总是陷入Windows复杂的参数,纠结于这些。从老师的讲解中,这些内容属于是定式,主要学习写的逻辑。给自己提个醒,要把精力放在正确的位置,不要无端耗费精力。…...
leetcode1985. 找出数组中的第 K 大整数
给你一个字符串数组 nums 和一个整数 k 。nums 中的每个字符串都表示一个不含前导零的整数。 返回 nums 中表示第 k 大整数的字符串。 注意:重复的数字在统计时会视为不同元素考虑。例如,如果 nums 是 ["1","2","2"]&am…...
基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度野生动物检测(水牛、犀牛、斑马和大象)识别系统可用于日常生活中或野外来检测与定位野生动物目标,利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别,另外支持结果可视…...
从零开始 Spring Boot 35:Lombok
从零开始 Spring Boot 35:Lombok 图源:简书 (jianshu.com) Lombok是一个java项目,旨在帮助开发者减少一些“模板代码”。其具体方式是在Java代码生成字节码(class文件)时,根据你添加的相关Lombok注解或类来…...
深入解析Spring源码系列:Day 6 - Spring MVC原理
深入解析Spring源码系列:Day 6 - Spring MVC原理 欢迎来到本系列的第六篇博客。在前几篇博客中,我们探索了Spring框架的核心概念,包括Bean的生命周期、作用域、AOP原理和事务管理。今天,我们将深入研究Spring框架中的MVC…...
Cmake中message函数 如何优雅地输出
message函数说明 在CMake中,message()函数用于向终端输出信息。 message([<mode>] "message text" ...)函数的<mode>参数可以是以下之一: (none): 等同于STATUS,但不推荐使用。STATUS: 输出的信息会被发送到CMake的…...
人工智能基础部分20-生成对抗网络(GAN)的实现应用
大家好,我是微学AI,今天给大家介绍一下人工智能基础部分20-生成对抗网络(GAN)的实现应用。生成对抗网络是一种由深度学习模型构成的神经网络系统,由一个生成器和一个判别器相互博弈来提升模型的能力。本文将从以下几个方面进行阐述࿱…...
JavaScript表单事件(上篇)
目录 一、input: 当表单元素的值发生改变时触发,适用于大多数表单元素。 二、change: 当表单元素的值发生改变且失去焦点时触发,适用于输入框、下拉列表等。 三、submit: 当表单提交时触发,适用于 form 元素。 四、reset: 当表单重置时触…...
vb6 Webview2微软Edge Chromium内核执行JS取网页数据测速
微软Edge Chromium内核执行JS获取网页数据测试 ExcuteScript eval(document.body.innerHTML) from : https://www.163.com 采集的网页HTM字符串占用字节空间1.2MB ExcuteScript回调事件中取得JS执行结果,用时 54 毫秒 其中JSON转字符13.5209毫秒 jSON数据长度: 增…...
编码,Part 1:ASCII、汉字及 Unicode 标准
个人博客 编码的历史由来就懒得介绍了,只需要知道人类处理文本信息是以字符为基本单位,而计算机在最底层只认识 0/1,所以当计算机要为人类存储/呈现字符时,就需要有一个规则,在字符和 0/1 序列之间建立映射关系&#…...
C++ Eigen库矩阵操作
C Eigen库 序号功能例子1赋值Eigen::MatrixXf mat (12,1); \\% mat << 1, 2, 3, 4,5,6,7,8,9,10,11,12;2Inplace操作 \\% resizemat.resize(4, 3); \\% 1 5 9 \\% 2 6 10 \\% 3 7 11 \\% 4 8 123转置 \\% transposeInPlacemat.transposeInPlace(); \\% 1 2 3 4 \\% 5…...
Linux-0.11 boot目录bootsect.s详解
Linux-0.11 boot目录bootsect.s详解 模块简介 bootsect.s是磁盘启动的引导程序,其概括起来就是代码的搬运工,将代码搬到合适的位置。下图是对搬运过程的概括,可以有个印象,后面将详细讲解。 bootsect.s主要做了如下的三件事: 搬…...
django组件552
前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…...
【枚举算法的Java实现及其应用】
文章目录 枚举算法概述枚举算法的实现步骤Java实现枚举算法枚举算法的底层工作原理枚举算法的底层代码讲解枚举算法的实际应用场景枚举算法在场景中解决的问题总结 枚举算法概述 枚举算法是一种通过列举所有可能情况来解决问题的方法。这种算法在解决一些特定类型的问题时非常…...
linux led 驱动
前言 今天是儿童节,挣个奖牌给小孩玩玩。 在 linux 驱动大家庭中,LED 驱动算是个儿童,今天就写写他吧。正好之前写过他的婴儿时期《i.MX6ULL 裸机点亮 LED》,记得那时候他还穿着开裆裤呢,裸鸡嘛。 ioremap() 裸机程…...
平面最近点对(分治算法)
文章目录 平面最近点对(分治算法)Solution流程完整模板代码 平面最近点对(分治算法) 文章首发于我的个人博客:欢迎大佬们来逛逛 平面最近点对(加强版) - 洛谷 给你一些点,求两点之…...
【基于前后端分离的博客系统】Servlet版本
🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一. 项目简介 1. 项目背景 2. 项目用到的技…...
在线Excel绝配:SpreadJS 16.1.1+GcExcel 6.1.1 Crack
前端:SpreadJS 16.1.1 后端: GcExcel 6.1.1 全能 SpreadJS 16.1.1此版本的产品中包含以下功能和增强功能。 添加了各种输入掩码样式选项。 添加了在保护工作表时设置密码以及在取消保护时验证密码的支持。 增强了组合图以将其显示为仪表图。 添加了…...
用Python和NumPy实现2D图像旋转:从复数乘法到旋转矩阵的保姆级实践
用Python和NumPy实现2D图像旋转:从复数乘法到旋转矩阵的保姆级实践 在计算机视觉和游戏开发中,图像旋转是最基础却至关重要的操作之一。想象一下,当你需要调整一张照片的角度,或者在游戏中让角色转向特定方向时,背后的…...
你的EEPROM数据丢了吗?基于STM32和AT24CXX的I2C通信稳定性实战调优指南
EEPROM数据可靠性实战:STM32与AT24CXX的I2C通信深度优化 在工业控制、医疗设备和消费电子等领域,EEPROM作为非易失性存储器承担着关键参数存储的重任。但当系统突然断电或遭遇电磁干扰时,工程师们常会遇到数据丢失、校验失败等棘手问题。本文…...
掌握AI写教材方法,低查重工具让教材编写变得如此简单!
许多教材编写者常感到失落,因为经过反复琢磨的教材内容,在缺乏相应的辅助资源时,教学效果往往大打折扣。课后练习的题型设计需要有层次感,但往往缺乏创新灵感;想要制作出直观的教学课件,却没有技术来实现&a…...
10分钟完成AI智能图像分层:layerdivider完整使用指南
10分钟完成AI智能图像分层:layerdivider完整使用指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾经花费数小时手动分离插图中的不…...
视频生成MOE Mamoda2.5:基于DiT-MoE的统一多模态理解与生成框架技术解析
稀疏激活专家混合架构驱动的高效视频理解与生成新范式 多模态大模型视频生成DiT-MoE稀疏激活强化学习 统一多模态模型正经历从"单任务专家"向"一体化系统"的范式转变。字节跳动研究团队提出的Mamoda2.5,通过将细粒度混合专家(MoE&…...
OpCore-Simplify:三步搞定OpenCore EFI配置的终极解决方案
OpCore-Simplify:三步搞定OpenCore EFI配置的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore EFI配置而…...
从一道SWPUCTF题复盘PHP文件包含漏洞:allow_url_include开启后,除了伪协议还能怎么玩?
从SWPUCTF赛题探索PHP文件包含漏洞的深层攻防 在CTF竞赛和实际渗透测试中,PHP文件包含漏洞一直是Web安全领域的重要课题。这道来自SWPUCTF新生赛的题目看似简单,却蕴含了丰富的攻防对抗思路。当allow_url_include配置被开启时,攻击面会显著扩…...
ncmdump:网易云NCM音乐解密转换终极指南
ncmdump:网易云NCM音乐解密转换终极指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字音乐时代,网易云音乐的NCM加密格式成为众多音乐爱好者的使用障碍。ncmdump作为一款高效的开源解密工具ÿ…...
告别手动抓瞎:用vmp3-import-fix-x86和Universal Import Fixer搞定VMP3.5壳的IAT修复
VMP3.5壳IAT修复的高效工具链实践指南 逆向工程领域里,VMProtect始终是令人又爱又恨的存在。特别是3.5版本引入的IAT混淆机制,让不少安全研究员在深夜调试时抓狂。传统手动修复不仅耗时耗力,还容易遗漏关键调用。经过多次实战验证࿰…...
LLM 本地部署框架 vLLM 和 LMDeploy
1. 安装vLLM的环境 1.1 安装要求 1. vLLM 包含预编译的 C 和 CUDA (12.8) 二进制文件。 2. 要求: 操作系统: LinuxPython: 3.9 -- 3.12 # (实测:推荐安装3.10以上版本)GPU: 计算能力 7.0 或更高 (例如, V100, T4, RTX20xx, A100, L4, H100 等…...
