免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 6027 | 回复: 0

openssl TLS 1.3 学习1 [复制链接]

论坛徽章:
0
发表于 2018-04-26 22:00 |显示全部楼层
一、资源
        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一下,既可以熟悉源码,也可以熟悉协议。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP