Netty、MINA、Twisted中SSL/TLS的示例分析(mina,netty,ssl,开发技术)

时间:2024-05-08 16:36:11 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Netty%E3%80%81MINA%E3%80%81Twisted%E4%B8%ADSSL%2FTLS%E7%9A%84%E7%A4%BA%E4%BE%8B%E5%88%86%E6%9E%90

1. 相关术语

在学习SSL/TLS协议之前,首先要了解一些相关概念:

对称加密:加密和解密都采用同一个密钥,常用的算法有DES、3DES、AES,相对于非对称加密算法更简单速度更快。

非对称加密:和对称加密算法不同,非对称加密算法会有两个密钥:公钥(可以公开的)和私钥(私有的),例如客户端如果使用公钥加密,那么即时其他人有公钥也无法解密,只能通过服务器私有的私钥解密。RSA算法即是典型的非对称加密算法。

数字证书:数字证书是一个包含公钥并且通过权威机构发行的一串数据,数字证书很多需要付费购买,也有免费的,另外也可以自己生成数字证书,本文中将会采用自签名的方式生成数字证书。

2.SSL/TLS流程

使用SSL/TLS协议的服务器和客户端开始通信之前,会先进行一个握手阶段:

1)客户端发出请求:这一步客户端会生成一个随机数传给服务器。

2)服务器回应:这一步服务器会返回给客户端一个服务器数字证书(证书中包含用于加密的公钥),另外服务器也会生成一个随机数给客户端。

3)客户端回应:这一步客户端首先会校验数字证书的合法性,然后会再生成一个随机数,这个随机数会使用第2步中的公钥采用非对称加密算法(例如RSA算法)进行加密后传给服务器,密文只能通过服务器的私钥来解密。

4)服务器最后回应:握手结束。

握手结束后,客户端和服务器都有上面握手阶段的三个随机数。客户端和服务器都通过这三个随机生成一个密钥,接下来所有的通信内容都使用这个密钥通过对称加密算法加密传输,服务器和客户端才开始进行安全的通信。

3. 生成私钥和证书

使用openssl来生成私钥和证书:

运行以上命令后,会在当前目录下生成一个私钥文件(private.pem)和一个证书文件(cert.crt)。

生成的私钥和证书Twisted、Netty可以直接使用,然而MINA对私钥文件的格式的要求,要将pem格式转换成der格式,实际上就是将文本文件私钥转成二进制文件私钥。openssl将private.pem转成private.der私钥文件:

4. SSL/TLS服务器

接下来在Netty、MINA、Twisted一起学系列02:TCP消息边界问题及按行分割消息一文的基础上,加上SSL/TLS层。

1)MINA

MINA 可以通过 SslFilter 来实现 SSL/TLS,初始化 SslFilter 的代码比较繁琐:

2)Netty

Netty 通过添加一个 SslHandler 来实现 SSL/TLS,相对 MINA 来说代码就比较简洁:

3)Twisted

Twisted 实现 SSL/TLS 也是非常简单的,将 reactor.listenTCP 替换为 reactor.listenSSL 即可。

5. SSL/TLS客户端

这里还是使用Java来写一个SSL/TLS客户端,用来测试以上三个服务器程序。需要注意的是,在上面SSL/TLS流程的介绍中,SSL/TLS握手阶段的第2步服务器会将证书传给客户端,第3步客户端会校验证书的合法性,所以下面的代码首先会让客户端信任openssl生成的证书,才能正确的完成SSL/TLS握手。

本文:Netty、MINA、Twisted中SSL/TLS的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:LayUi中表格不显示数据如何解决下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18