文档章节

openssl建立tls1连接过程(s->state的变化过程)

Yan9527
 Yan9527
发布于 2017/06/24 18:16
字数 490
阅读 182
收藏 0

以下是调用openssl建立tls1连接过程中,openssl内部对握手阶段的处理过程,可以对照抓包观察

以下服务端和客户端是并行进行的,只是需要接收对端消息时才会进入等待状态.为方面理解,所以将客户端和服务端的处理按顺序排好.

具体的状态转换代码请见:

server端  /ssl/s3_srvr.c的ssl3_accept方法        client端  /ssl/s3_clnt.c的ssl3_connect方法

 

client:  SSL_ST_OK | SSL_ST_CONNECT   //为ssl字段赋初始值

server:  SSL_ST_OK | SSL_ST_CONNECT   //为ssl字段赋初始值

client:  SSL3_ST_CW_CLNT_HELLO_A    //发送client_hello

server:  SSL3_ST_SR_CLNT_HELLO_A  //ssl3_get_client_hello(实际运行时是server运行到这里后进入等待

            client_hello状态,在client BIO_flush后收到消息继续处理)

server:  SSL3_ST_SW_SRVR_HELLO_A  //ssl3_send_server_hello//组装server_hello

server:  SSL3_ST_SW_KEY_EXCH_A //ssl3_send_server_key_exchange

server:  SSL3_ST_SW_CERT_REQ_A  //ssl3_send_certificate_request//请求客户端证书

server:  SSL3_ST_SW_FLUSH  //BIO_flush 将如上待发送的消息全部发送出去,客户端将接收消息继续处理

server:  SSL3_ST_SR_CERT_A //ssl3_get_client_certificate进入等待接收客户端证书的状态

client:  SSL3_ST_CR_SRVR_HELLO_A  //ssl3_get_server_hello(实际运行时是client运行到这里后进入等待

            server_hello状态,在server BIO_flush后收到消息继续处理)

client:  SSL3_ST_CR_CERT_A  //ssl3_get_server_certificate

client:  SSL3_ST_CR_KEY_EXCH_A  //ssl3_get_key_exchange

client:  SSL3_ST_CR_CERT_REQ_A  //ssl3_get_certificate_request

client:  SSL3_ST_CR_SRVR_DONE_A //ssl3_get_server_done

client: SSL3_ST_CW_CERT_A //ssl3_send_client_certificate

client:  SSL3_ST_CW_KEY_EXCH_A //ssl3_send_client_key_exchange

client:  SSL3_ST_CW_CERT_VRFY_A  //ssl_send_client_verify

client: SSL3_ST_CW_CHANGE_A  //ssl3_send_change_cipher_spec通知启动对称加密的消息

client: SSL3_ST_CW_FINISHED_A   //ssl3_send_finished

client: SSL3_ST_CW_FLUSH   //BIO_flush

client: SSL3_ST_CR_SESSION_TICKET_A //ssl3_get_new_session_ticket 进入等待接收消息状态//////////

server:  SSL3_ST_SR_KEY_EXCH_A  //ssl3_get_client_key_exchange

server:  SSL3_ST_SR_CERT_VRFY_A  //ssl3_get_cert_verify

server:  SSL3_ST_SR_FINISHED_A  //ssl3_get_finished

server:  SSL3_ST_SW_SESSION_TICKET_A //ssl3_send_newsession_ticket

server:  SSL3_ST_SW_CHANGE_A  //ssl3_send_change_cipher_spec通知启动对称加密的消息

server: SSL3_ST_SW_FINISHED_A   //ssl3_send_finished

server:  SSL3_ST_SW_FLUSH  //BIO_flush

server:  SSL3_ST_OK   //ssl3_cleanup_key_block   ssl_update_cache等等,至此服务端完成所有握手

client: SSL3_ST_CR_SESSION_TICKET_A //ssl3_get_new_session_ticket 继续处理////////////////////////

client: SSL3_ST_CR_FINISHED_A  //ssl3_get_finished

client:  SSL_ST_OK  //ssl3_cleanup_key_block   ssl_update_cache等等

连接已建立,开始对称密钥加密的通信

 

 

© 著作权归作者所有

上一篇: 关于C++锁
下一篇: 部分国密算法OID
Yan9527
粉丝 0
博文 31
码字总数 11309
作品 0
海淀
后端工程师
私信 提问
区块链100讲:HTTPS协议的原理及其与HTTP协议的区别

1 HTTPS协议是什么 https协议比http协议多了一个s,字面意思上s=secure(安全)。它跟http协议一样都是应用层协议,都是工作在TCP协议之上。 只不过https协议在传输过程中的数据都是经过了加密...

HiBlock
2018/11/02
6
0
ssl中的两个BIO--ssl以及ipsecl的一些概念

ssl中有两个BIO,一个是读方向的,另一个是写方向的,也就是rbio和wbio,一般情况下它们是同一个bio,这是因为一般而言的ssl是在tcp上建立的,而实际上它也可以建立在管道或者内存缓冲区等任...

晨曦之光
2012/04/10
95
0
Configuring SSL in Wildfly 8

Configuring SSL in Wildfly 8 一:什么是SSL   SSL(Security Socket Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递...

Zhao-Qian
2015/03/10
1K
0
数字证书(1)

工作原理 数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)...

wbf961127
2017/11/08
0
0
openSSL demo 练习之 state_machine

20181111 openSSL demo 练习之 state_machine 1、Xcode 新建一个 Command Line Tool 项目,语言选择 c 2、Finder 打开以前查找过的我自己的 mac 上的 openssl 文件夹(查找过程如下) openss...

wwzzhh166
2018/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mac下redis安装、设置、启动停止

常用命令说明 redis服务器:redis-server redis客户端:redis-cli redis性能测试工具:redis-benchmark AOF文件修复工具:redis-check-aof RDB文件修复工具:redis-check-rd redis设置临时密...

botkenni
9分钟前
3
0
好程序员web前端分享HTML5常见面试题集锦四

好程序员web前端分享HTML5常见面试题集锦四 1、为什么要初始化CSS样式? 答案:因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面...

好程序员官方
10分钟前
2
0
CDN的网络架构是什么?

CDN网络架构主要由两大部分,分为中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房,边缘主要指异地节点,CDN分发的载体,主要由Cac...

云漫网络Ruan
11分钟前
2
0
pandas入门07---可视化

01 入门 制作提供信息的可视化是数据分析的重要任务之一。首先介绍一下matplotlib库。 import matplotlib.pyplot as pltimport numpy as npdata = np.arange(10)print(data)plt.plot(da...

筠初
12分钟前
2
0
201_PyTorch中文教程:Torch与Numpy互操作

201_PyTorch中文教程:Torch与Numpy互操作 Numpy是经典的数学计算库,Torch中的Tensor可以与之互相转换,从而可以充分利用二者的计算函数和模型,以及使用其它支持Numpy的软件库和工具。但需...

openthings
12分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部