openssl代碼分析(5) ssl庫

以前簡單分析了crypto庫,主要是針對經常使用的x509相關的code,其餘的像pkcs7,pkcs12這樣的都很是相似,熟悉ASN1的話,那麼對代碼的理解會比較容易,因此也就再也不贅述了。算法

對於ssl庫,我想最重要的就是搞清楚ssl handshake的code,清楚handshake過程和代碼的對應關係。app

要搞清楚上面所說的關係,瞭解怎麼利用openssl來寫本身的ssl應用也是一個起步,因此首先把着手點放在s_server和s_client這2個openssl的app上,參照這2個app就能夠很輕鬆的寫出本身的ssl based的app了。框架

ssl client的基本框架以下:socket

1. 初始化一個socket,直到調用connect創建鏈接spa

2. 調用OpenSSL_add_ssl_algorithms初始化鏈接過程須要的算法.net

3.調用SSLv23_client_method初始化一個SSL_MTHODcode

4.調用SSL_load_error_strings載入錯誤信息字符串server

5.調用SSL_CTX_new初始化一個SSL_CTX,參數爲以前初始化的SSL_METHODblog

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的過程。

  • 上一篇:另一個閱讀openssl code的tip
  • 下一篇:openssl 代碼分析(6) SSL_connect
  • 相關文章
    相關標籤/搜索