前言
在分析cve-2021-3449漏洞的时候接触到了SSL/TLS协议,这个漏洞的原理为:如果从客户端发送了恶意的重新协商ClientHello消息,则OpenSSL TLS服务器可能会崩溃。如果TLSv1.2重新协商ClientHello省略了signature_algorithms扩展名(在最初的ClientHello中存在),但包括了signature_algorithms_cert扩展名,则将导致NULL指针取消引用,从而导致崩溃和拒绝服务攻击。
这里不探讨这个漏洞,我简单贴一下一些协议的基础知识,仅仅作为笔记
握手
下图为握手的大致过程
协议的学习通过抓包分析是最有效率的,这里直接抓了包,可以看到我们需要关注的只是Secure Sockets Layer(SSL)就可以了,下面有一些属性之类的值,其中比较重要的有Random(一个随机数,关系到密钥生成),Extensions(拓展功能)等等,具体字段的含义可以看下我下面的参考
整个建立连接的过程大致如下
1、client_hello(客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息)
2、server_hello+server_certificate+sever_hello_done( server_hello, 服务端返回协商的信息结果,server_certificates, 服务器端配置对应的证书链,用于身份验证与密钥交换; server_hello_done,通知客户端 server_hello 信息发送结束;)
3、证书校验(客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作)
4、client_key_exchange+change_cipher_spec+encrypted_handshake_message(client_key_exchange,合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器; change_cipher_spec,客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信; encrypted_handshake_message,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证;)
5、change_cipher_spec+encrypted_handshake_message(计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性; change_cipher_spec, 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信; encrypted_handshake_message, 服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端;)
6、握手结束
7、加密通信
参考文章
https://blog.csdn.net/mrpre/category_9270159.html
https://www.wosign.com/FAQ/faq2016-0309-04.htm
https://www.uedbox.com/post/9994/