Chinaunix
标题: openssl TLS 1.3 学习1 [打印本页]
作者: forxy 时间: 2018-04-26 22:00
标题: openssl TLS 1.3 学习1
一、资源
TLS1.3 正式版本还未发布,截止2018-4-26日为止,草案版本为28,URL为:
https://datatracker.ietf.org/doc/draft-ietf-tls-tls13/ ,网站截图:
TLS1.3草案
openssl早已开始支持TLS1.3协议,目前最新版本为 openssl-1.1.1-pre5。感兴趣的同学可以一起来研究一下。
二、搭建环境
2.1编译安装
./config -d --prefix=/usr/local/openssl-1.1.1-pre5
make
make install
加-d参数是为了gdb调试。
2.2 建立CA 并发两张证书
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl-1.1.1-pre5/lib
export PATH=$PATH:./
cd /usr/local/openssl-1.1.1-pre5/ssl/misc
cp .././../bin/openssl .
./CA.pl -newca
./openssl req -newkey rsa:1024 -keyout s.key -out sreq.pem
./openssl req -newkey rsa:1024 -keyout c.key -out creq.pem
./openssl ca -in sreq.pem -out s.pem
./openssl ca -in creq.pem -out c.pem
启动服务端:
./openssl s_server -tls1_3 -CAfile demoCA/cacert.pem -cert s.pem
-key s.key -cipher TLS_AES_256_GCM_SHA384 -state -Verify 1
启动客户端:
./openssl s_client -tls1_3 -CAfile demoCA/cacert.pem -cert c.pem
-key c.key -cipher TLS_AES_256_GCM_SHA384 -state
环境搭建完毕。
三、研究内容
学习总需要有一个切入点,采用哪个? 顺便选一个吧:对称密钥是如何生成的?先看理论:
完整握手过程
这是一个典型的非常完整的握手过程,这里只显示了网络上的消息,我们把客户端和服务端内部要处理的
过程也做标记,如下图,红色为交互的消息,蓝色为后台处理。
收发消息及其处理
再进一步,我们将每条消息加密的密钥标出来,这里涉及4个密钥:
握手过程-服务端写密钥(keyA)、握手过程-服务端读密钥(keyB)、应用-服务端写密钥(keyC)、应用-服务端读密钥(keyD)。如下图所示:
密钥产生及标注
setup密钥会调用 tls13_enc.c 的 tls13_change_cipher_state 函数,可以将断点定在
tls13_change_cipher_state 函数,执行上面的两条命令(s_client和s_server)来确定客户端和服务端分别在哪个阶段启用了哪个密钥。
tls13_change_cipher_state函数大体上不复杂,简化如下(未研究early data,只与上面过程匹配):
密钥启用
感兴趣的话,可以自己gdb一下,既可以熟悉源码,也可以熟悉协议。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) |
Powered by Discuz! X3.2 |