回答
Netty 是支持使用SSL/TLS
协议进行加密传输的,其主要依赖 SslHandler
。SslHandler
是 Netty 内置的一个处理加密和解密 ChannelHandler,使用它我们可以很方便地在 Netty 中添加 SSL/TLS
加密功能,确保数据传输的安全性。主要分为三个步骤:
- 生成密钥和证书
- 创建
SslContext
实例 - 将
SslHandler
添加到 ChannelPipeline
详解
在 Netty 中使用 SslHandler
实现 SSL/TLS
加密传输分为三步。
生成密钥和证书
首先我们需要生成一个 SSL 证书。SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。
SSL/TLS 位于TCP层和应用层之间,具体如下图所示:
生成 SSL 证书的方式有很多种,一种比较简单的方式是直接去阿里云、腾讯云生成证书(貌似需要先购买域名),或者 HTTPS 厂商那里申请收费证书(一般都比较贵),也可以使用 openssl
这个工具自己生成证书。大明哥一般都喜欢干有复杂的活,所以这里我们选择使用 openssl
自己生成证书。
下图是使用 openssl 生成证书的整个流程(参考https://cloud.tencent.com/developer/article/1548350):
整个过程分为 A、B、C 三个部分:
- A 部分是 CA 机构根证书的生成过程,这个过程需要先生成 CA 机构的私钥,再由 CA 机构的私钥生成 CA 机构证书申请文件,然后再由这两个文件生成根证书。
- B 部分是生成服务器私钥,然后由服务器私钥生成[服务器证书]申请文件。
- C 部分是最后一部分,也就是生成服务器的公钥证书,服务器的公钥证书需要三部分一起来生成,A 部分的 CA 机构的私钥,CA 机构的申请证书文件,B 部分的服务器证书申请文件,这三部分一起来生成服务器的公钥证书。
由于我们要完成的是基于 SSL/TLS 服务器和客户端的双向加密通讯,所以需要生成 5 份证书:
- CA证书
- 服务器证书
- 服务器密钥
- 客户端证书
- 客户端密钥
按照下面步骤来就就可以了。
- 1、生成 CA 机构的私钥
openssl genrsa -out ca.key 1024
- 2、生成CA 机构自己的证书申请文件
openssl req -new -key ca.key -out ca.csr