前言
回顧Netty系列文章:
- Netty 概述(一)
- Netty 架構設計(二)
- Netty Channel 概述(三)
- Netty ChannelHandler(四)
- ChannelPipeline源碼分析(五)
- 字節(jié)緩沖區(qū) ByteBuf (六)(上)
- 字節(jié)緩沖區(qū) ByteBuf(七)(下)
- Netty 如何實現(xiàn)零拷貝(八)
- Netty 程序引導類(九)
- Reactor 模型(十)
- 工作原理詳解(十一)
- Netty 解碼器(十二)
- Netty 編碼器(十三)
- Netty 編解碼器(十四)
- 自定義解碼器、編碼器、編解碼器(十五)
- Future 源碼分析(十六)
- Promise 源碼分析(十七)
- 一行簡單的writeAndFlush都做了哪些事(十八)
今天數(shù)據(jù)隱私是一個十分關注的問題,作為開發(fā)人員,我們需要準備好解決這個問題。至少我們需要熟悉加密協(xié)議 SSL 和 TLS 等之上的其他協(xié)議實現(xiàn)數(shù)據(jù)安全。作為一個 HTTPS 網站的用戶,你是安全。當然,這些協(xié)議是廣泛不基于 http 的應用程序,例如安全SMTP(SMTPS)郵件服務,甚至關系數(shù)據(jù)庫系統(tǒng)。
為了支持 SSL/TLS,Java 提供了 javax.net.ssl API 的類SslContext 和 SslEngine 使它相對簡單的實現(xiàn)解密和加密。Netty 的利用該 API 命名 SslHandler 的 ChannelHandler 實現(xiàn),有一個內部 SslEngine 做實際的工作。
一、SSL/TLS概述
SSL全稱是Secure Sockets Layer,安全套接字層,它是由網景公司(Netscape)設計的主要用于Web的安全傳輸協(xié)議,目的是為網絡通信提供機密性、認證性及數(shù)據(jù)完整性保障。如今,SSL已經成為互聯(lián)網保密通信的工業(yè)標準。
SSL/TLS 位于TCP層和應用層之間,具體如下圖所示:
二、Sslhandler類
Sslhandler 繼承自 ByteToMessageDecoder 并實現(xiàn)了 ChannelOutboundHandler 接口,因此可以像其他 ChannelHandler 一樣添加到 ChannelPipeline 中,下圖展示了 SslHandler 數(shù)據(jù)流圖。
- 加密的入站數(shù)據(jù)被 SslHandler 攔截,進行解密。
- 前面加密的數(shù)據(jù)被 SslHandler 解密后,原始數(shù)據(jù)入站。
- 原始數(shù)據(jù)經過 SslHandler。
- SslHandler 加密數(shù)據(jù)并它傳遞出站。
以下為一個 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
}
}
- 使用構造函數(shù)來傳遞 SSLContext 用于使用(startTls 是否啟用)。
- 從 SslContext 獲得一個新的 SslEngine 。給每個 SslHandler 實例使用一個新的 SslEngine。
- 設置 SslEngine 是 client 或者是 server 模式。
- 添加 SslHandler 到 pipeline 作為第一個處理器。
在大多數(shù)情況下,SslHandler 將成為 ChannelPipeline 中的第一個 ChannelHandler 。這將確保所有其他 ChannelHandler 應用他們的邏輯到數(shù)據(jù)后加密后才發(fā)生,從而確保他們的變化是安全的。文章來源:http://www.zghlxwxcb.cn/news/detail-465351.html
SslHandler 有很多有用的方法,如下表所示。例如,在握手階段兩端相互驗證,商定一個加密方法。你可以配置 SslHandler 修改其行為或提供 在SSL/TLS 握手完成后發(fā)送通知,這樣所有數(shù)據(jù)都將被加密。 SSL/TLS 握手將自動執(zhí)行。文章來源地址http://www.zghlxwxcb.cn/news/detail-465351.html
姓名 | 描述 |
---|---|
setHandshakeTimeout(…) setHandshakeTimeoutMillis(…) getHandshakeTimeoutMillis() | 設置和獲取超時,之后握手 ChannelFuture 被通知失敗。setCloseNotifyTimeout(…) setCloseNotifyTimeoutMillis(…) getCloseNotifyTimeoutMillis() |
握手未來() | 返回一個 ChannelFuture,一旦握手完成,就會收到通知。如果握手之前完成,它將返回一個包含上次握手結果的 ChannelFuture。 |
關閉(…) | 發(fā)送 close_notify 請求關閉并銷毀底層 SslEngine。 |
到了這里,關于【Netty】使用 SSL/TLS 加密 Netty 程序(二十)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!