openssl代码分析--- ssl库 .

之前简单分析了crypto库,主要是针对常用的x509相关的code,其他的像pkcs7,pkcs12这样的都非常类似,熟悉ASN1的话,那么对代码的理解会比较容易,所以也就不再赘述了。

对于ssl库,我想最重要的就是搞清楚ssl handshake的code,清楚handshake过程和代码的对应关系。

要搞清楚上面所说的关系,了解怎么利用openssl来写自己的ssl应用也是一个起步,所以首先把着手点放在s_server和s_client这2个openssl的app上,参照这2个app就可以很轻松的写出自己的ssl based的app了。

ssl client的基本框架如下:

1. 初始化一个socket,直到调用connect建立连接

2. 调用OpenSSL_add_ssl_algorithms初始化连接过程需要的算法

3.调用SSLv23_client_method初始化一个SSL_MTHOD

4.调用SSL_load_error_strings载入错误信息字符串

5.调用SSL_CTX_new初始化一个SSL_CTX,参数为之前初始化的SSL_METHOD

6.调用SSL_new初始化一个SSL,参数为5中初始化的SSL_CTX

7.调用SSL_set_fd将socket和SSL绑定

8.调用SSL_connect连接ssl server,SSL_connect会完成所有的ssl handshake工作。

9.ssl 连接建立之后,就可以调用SSL_write或SSL_read读写ssl数据了。由于SSL和socket已经绑定,所以可以通过对socket进行select操作来监听连接的数据,在进行ssl IO操作。

ssl server的代码框架与之类似,可以参考s_server.c.

s_client和s_server的代码远远复杂于上面所写的基本框架,那是因为ssl提供了非常多的接口,可以便于用户控制整个连接的过程。这些API大多以SSL_set_xx的形式命名,具体可参考ssl.h头文件的声明。后面会结合分析连接建立的过程来了解这些API。

下面是从commons.wikimedia.org找到的一张不错的SSL Handshake图表,比较清晰的描述了SSL Handshake的过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值