zoukankan      html  css  js  c++  java
  • Netty入门(七)使用SSL/TLS加密Netty程序

      为了支持 SSL/TLS,Java 提供了 javax.net.ssl API 的类 SslContext 和 SslEngine 使它相对简单的实现解密和加密。Netty 利用该 API 实现了 ChannelHandler 的子类 SslHandler。下图为 Sslhandler 的数据流图:  

      

    1.  加密的入站数据被 SslHandler 拦截,进行解密
    2.  数据被解密后,原始数据入站
    3.  原始数据经过 SslHandler
    4.  SslHandler 加密数据并传递数据出站

       下面是 SslHandler 的一个简单使用:

     1 public class SslChannelInitializer extends ChannelInitializer<Channel> {
     2     private final SslContext context;
     3     private final boolean client;
     4     private final boolean startTls;    // 第一次请求是否加密
     5 
     6     public SslChannelInitializer(SslContext context, boolean client, boolean startTls) {
     7         this.context = context;
     8         this.client = client;    
     9         this.startTls = startTls;
    10     }
    11     
    12     @Override
    13     protected void initChannel(Channel ch) throws Exception {
    14         // 给每个 SslHandler 实例使用一个新的 SslEngine
    15         SSLEngine engine = context.newEngine(ch.alloc());
    16         engine.setUseClientMode(client);    // 设置SslEngine是client或者是server模式
    17         // 添加SslHandler到pipeline作为第一个处理器
    18         ch.pipeline().addFirst("ssl", new SslHandler(engine, startTls));
    19     }
    20 
    21 }

       如上所示,SslHandler 使用 ChannelInitializer 添加到 ChannelPipeline。在大多数情况下,SslHandler 将成为 ChannelPipeline 的第一个 ChannelHandler。

      SslHandler 还有很多有用的方法,如下:

      

  • 相关阅读:
    Spark入门实战系列--1.Spark及其生态圈简介
    理解JavaScript的原型链
    为什么overflow:hidden能达到清除浮动的目的?
    JavaScript中为什么需要!!?
    CSS品控与流程
    CSS高级特效(下)
    CSS高级特效(上)
    CSS变化、过渡与动画
    CSS表单与数据表(下)
    CSS表单与数据表(上)
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/Netty07.html
Copyright © 2011-2022 走看看