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 還有很多有用的方法,如下:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM