2024-04-04
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/7513166811

回答

Netty 是支持使用SSL/TLS协议进行加密传输的,其主要依赖 SslHandlerSslHandler 是 Netty 内置的一个处理加密和解密 ChannelHandler,使用它我们可以很方便地在 Netty 中添加 SSL/TLS 加密功能,确保数据传输的安全性。主要分为三个步骤:

  1. 生成密钥和证书
  2. 创建 SslContext 实例
  3. 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 份证书:

  1. CA证书
  2. 服务器证书
  3. 服务器密钥
  4. 客户端证书
  5. 客户端密钥

按照下面步骤来就就可以了。

  • 1、生成 CA 机构的私钥