【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

这篇具有很好参考价值的文章主要介绍了【Netty】使用 SSL/TLS 加密 Netty 程序(二十)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

回顾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层和应用层之间,具体如下图所示:
【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

二、Sslhandler类

Sslhandler 继承自 ByteToMessageDecoder 并实现了 ChannelOutboundHandler 接口,因此可以像其他 ChannelHandler 一样添加到 ChannelPipeline 中,下图展示了 SslHandler 数据流图。
【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

  1. 加密的入站数据被 SslHandler 拦截,进行解密。
  2. 前面加密的数据被 SslHandler 解密后,原始数据入站。
  3. 原始数据经过 SslHandler。
  4. 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) {   //1
        this.context = context;
        this.startTls = startTls;
    }
    
    @Override
    protected void initChannel(Channel ch) throws Exception {
        SSLEngine engine = context.newEngine(ch.alloc());  //2
        engine.setUseClientMode(client); //3
        ch.pipeline().addFirst("ssl", new SslHandler(engine, startTls));  //4
    }
}
  1. 使用构造函数来传递 SSLContext 用于使用(startTls 是否启用)。
  2. 从 SslContext 获得一个新的 SslEngine 。给每个 SslHandler 实例使用一个新的 SslEngine。
  3. 设置 SslEngine 是 client 或者是 server 模式。
  4. 添加 SslHandler 到 pipeline 作为第一个处理器。

在大多数情况下,SslHandler 将成为 ChannelPipeline 中的第一个 ChannelHandler 。这将确保所有其他 ChannelHandler 应用他们的逻辑到数据后加密后才发生,从而确保他们的变化是安全的。

SslHandler 有很多有用的方法,如下表所示。例如,在握手阶段两端相互验证,商定一个加密方法。你可以配置 SslHandler 修改其行为或提供 在SSL/TLS 握手完成后发送通知,这样所有数据都将被加密。 SSL/TLS 握手将自动执行。文章来源地址https://www.toymoban.com/news/detail-465351.html

姓名 描述
setHandshakeTimeout(…) setHandshakeTimeoutMillis(…) getHandshakeTimeoutMillis() 设置和获取超时,之后握手 ChannelFuture 被通知失败。setCloseNotifyTimeout(…) setCloseNotifyTimeoutMillis(…) getCloseNotifyTimeoutMillis()
握手未来() 返回一个 ChannelFuture,一旦握手完成,就会收到通知。如果握手之前完成,它将返回一个包含上次握手结果的 ChannelFuture。
关闭(…) 发送 close_notify 请求关闭并销毁底层 SslEngine。

到了这里,关于【Netty】使用 SSL/TLS 加密 Netty 程序(二十)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • logstash 开启ssl报错:Caused by: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record

    背景 :在使用证书的方式让beat和logstash通信传输数据的过程中,生成了证书,logstash的证书配置如下: 错误现象 :在启动logstsah的时候出现报错: 问题原因 :排错的过程比较辛酸,就不赘述了。这里的报错原因是证书中指定的ip在logstash发布服务的时候没有指定该ip,因此抛

    2024年02月12日
    浏览(57)
  • HTTP协议 和 HTTPS协议的区别(4点) && HTTPS如何使用SSL/TLS协议加密过程 && CA证书干啥的

      1. HTTP协议的端口号是80, HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头,HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTPS协议最主要的区别是: HTTP协议所生成的HTTP请求报文被TCP协议 以明文形式透明传输,同时 客户端与服务器之间无法核验对方的身份(不晓

    2024年02月14日
    浏览(45)
  • 添加https后反向代理gateway报错io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record

    域名及https绑定在openshift的router上,用route的Edge模式,证书终止在router(证书卸载),转发向后端请求是http的。后端接入nginx做反向代理,所有项目的流量都通过这个nginx。再向后转发是两个nginx,作为本项目的流量入口,有反代和静态文件解析功能。再向后就是服务gateway。

    2024年02月11日
    浏览(50)
  • 对称加密与非对称加密、证书、SSL/TLS握手过程

    对称加密,是一种既简单速度又快的加密方式,加密与解密使用的都是同一个密钥,别名又叫做:单密钥加密;对称加密有很多公开算法,并且因为它效率很高,所以适用于加密大量数据的场合;但其密钥的传输过程是不安全的,并且容易被破解,密钥管理起来也相对麻烦。

    2024年02月03日
    浏览(63)
  • HTTPS、对称/非对称加密、SSL/TLS

    问题描述:HTTP的请求和响应都是明文传输,有安全隐患 HTTPS :HTTPS并不是一个单独的协议,是在 TCP 和 HTTP 之间加入了 SSL/TLS 安全协议,使得报文能够加密传输,SSL是TLS的前身,现在使用的大多都是TLS。 对称加密 :发送方和接收方约定一个同样的规则也就是同一个密钥来对

    2024年04月10日
    浏览(46)
  • 配置SSL/TLS以启用HTTPS加密通信

    简介 在本教学文章中,我们将学习如何配置Nginx以支持安全套接字层(SSL/TLS),从而启用HTTPS并提供加密通信。SSL/TLS是一种安全协议,用于确保在网络上进行的通信的保密性和完整性。本教程将介绍如何生成SSL证书,配置Nginx以使用SSL/TLS,并启用HTTPS。 前提条件 在开始本教

    2024年02月15日
    浏览(59)
  • HTTPS加密协议详解:TLS/SSL握手过程

    基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程。 (1).client_hello 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: 支持的最高TSL协议版本version,从低到高依次 SS

    2024年02月09日
    浏览(41)
  • 基于OpenSSL的SSL/TLS加密套件全解析

    SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在OpenSSL中指定加密套件。 SSL/TLS协议的加密套件

    2024年01月22日
    浏览(41)
  • HTTP协议 和 HTTPS协议的区别(4点) && HTTPS的缺点 && HTTP如何使用SSL/TLS协议加密过程 && CA证书干啥的

      1. HTTP协议的端口号是80, HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头,HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTPS协议最主要的区别是: HTTP协议所生成的HTTP请求报文被TCP协议 以明文形式透明传输,同时 客户端与服务器之间无法核验对方的身份(不晓

    2024年02月14日
    浏览(49)
  • SSL/TLS加密技术:保护网络通信安全的关键技术

    SSL/TLS加密技术是一种常用的网络通信协议,用于确保数据在传输过程中的安全性和完整性。该技术可以帮助防止黑客、间谍、欺诈和其他形式的网络攻击,同时保护用户隐私和敏感信息。在本文中,我们将深入了解SSL/TLS加密技术的原理、功能和使用方法。 SSL(Secure Sockets

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包