转ssl连接建立过程分析

转ssl连接建立过程分析

ID:30475967

大小:97.68 KB

页数:32页

时间:2018-12-30

转ssl连接建立过程分析_第1页
转ssl连接建立过程分析_第2页
转ssl连接建立过程分析_第3页
转ssl连接建立过程分析_第4页
转ssl连接建立过程分析_第5页
资源描述:

《转ssl连接建立过程分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、转SSL连接建立过程分析42.13SSL_connect SSL_connect()这个函数完成SSL协商的客户端操作:/*ssl/ssl_lib.c*/intSSL_connect(SSL*s) { if(s->handshake_func==0)  /*Notproperlyinitializedyet*/  SSL_set_connect_state(s); return(s->method->ssl_connect(s)); }其中SSL_set_connect_state(s)函数初始化SSL协商处理:voidSSL_set_connect_state(SSL*s) {//客户

2、端 s->server=0; s->shutdown=0;//初始化客户端状态值 s->state=SSL_ST_CONNECT

3、SSL_ST_BEFORE;//握手函数即是ssl_connect函数 s->handshake_func=s->method->ssl_connect; /*clearthecurrentcipher*///清除SSL读写加密算法上下文 ssl_clear_cipher_ctx(s); }因此最重要的就是ssl_connect()这两个成员函数,是前面SSLv[2][3]_client_method()函数中定义的,如对于SSLv23方法,处理函数分别为ss

4、l23_connect()函数,其它SSLv2和SSLv3方法分别对应ssl2_connect()和ssl3_connect(),后两者就没有协商过程了,ssl23_connect()实际在协商确定协议版本后也是调用ssl2[3]_connect()。掌握了服务器端的accept过程,理解客户端的connect过程就简单了。/*ssl/s23_clnt.c*/intssl23_connect(SSL*s) { BUF_MEM*buf=NULL; unsignedlongTime=time(NULL); void(*cb)(constSSL*ssl,inttype,intval)=NULL

5、; intret=-1; intnew_state,state;//和服务器端一样进行基本的初始化 RAND_add(&Time,sizeof(Time),0); ERR_clear_error(); clear_sys_error(); if(s->info_callback!=NULL)  cb=s->info_callback; elseif(s->ctx->info_callback!=NULL)  cb=s->ctx->info_callback; s->in_handshake++; if(!SSL_in_init(s)

6、

7、SSL_in_before(s))SSL_clear

8、(s); for(;;)  {  state=s->state;//在SSL_set_connect_state中s->state被初始化为SSL_ST_CONNECT

9、SSL_ST_BEFORE  switch(s->state)   {  caseSSL_ST_BEFORE:  caseSSL_ST_CONNECT:  caseSSL_ST_BEFORE

10、SSL_ST_CONNECT:  caseSSL_ST_OK

11、SSL_ST_CONNECT://进行基本初始化,分配缓冲区   if(s->session!=NULL)    {    SSLerr(SSL_F_SSL23_CONN

12、ECT,SSL_R_SSL23_DOING_SESSION_ID_REUSE);    ret=-1;    gotoend;    }   s->server=0;   if(cb!=NULL)cb(s,SSL_CB_HANDSHAKE_START,1);   /*s->version=TLS1_VERSION;*/   s->type=SSL_ST_CONNECT;   if(s->init_buf==NULL)    {    if((buf=BUF_MEM_new())==NULL)     {     ret=-1;     gotoend;     }    if(!BUF_

13、MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))     {     ret=-1;     gotoend;     }    s->init_buf=buf;    buf=NULL;    }   if(!ssl3_setup_buffers(s)){ret=-1;gotoend;}   ssl3_init_finished_mac(s);//SSL客户端状态转为准备发送HELLO信息   s->

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。