chapter24 安全性
1、严峻的安全形势
- JDK的安全类库提供了SSLSocket和SSLServerSocket类库用于支持SSL/TLS安全传输,但对NIO并没有提供现成可用的
- Netty通过JDK的SSLEngine,以及SSLHandler的方式提供对SSL/TLS安全传输的支持。
- 对于Netty默认提供的HTTP协议,Netty利用SslHandler,同样支持HTTPS协议。
2、Netty SSL 安全特性
- Netty通过SslHandler提供对SSL的支持,包括SSL V2、SSL V3和TLS
2.1 SSL单向认证
- 单向认证即客户端只验证服务端的合法性,服务端不验证客户端。
- 单向认证开发参考526
- 单向认证原理
- SSL客户端向服务端传送客户端的SSL协议的版本号、支持的加密算法种类、产生的随机数、以及其他可选信息
- 服务端返回握手应答消息,向客户端传送确认SSL协议的版本号、加密算法的种类、随机数以及其他信息
- 服务端向客户端发送自己的公钥
- 客户端对服务端的证书进行认证,服务端的合法性校验包括:证书是否过期、发行服务器证书的CA是否可靠、发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”、服务器证书上的域名是否和服务器的实际域名相匹配等。
- 客户端随机产生一个用于后面通讯的“对称密码”,然后用服务端的公钥对其加密,将加密后的“预主密码”传给服务端。
- 服务端将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主密码
- 客户端向服务端发出信息,指明后面的数据通讯将使用主密码为对称密钥,同时通知服务器客户端的握手过程结束
- 服务端向客户端发出信息,指明后面的数据通讯将使用主密码为对称密钥,同时通知客户端服务器的握手过程结束
- SSL的握手部分结束,SSL安全通道建立,客户端和服务端开始使用相同的对称密钥对数据进行加密,然后通过Socket进行传输
2.2 SSL双向认证
- 客户度也需要进行安全认证,这意味着客户端产生的证书也要导入服务端的数字证书仓库中
- 双向认证开发533
- 双向认证原理
- SSL双向认证相比单向,多了一步服务端发送认证请求消息给客户端,客户端发送自签名证书给服务端进行安全认证的过程。
2.3 第三方CA认证
- 解决自签名SSL维护和调试工作量大的问题。因为对密钥和证书进行了修改,就需要重新进行签名和证书交换。
3、Netty SSL 源码分析
4、Netty扩展的安全特性
- IP地址黑白名单机制
- 接入认证