天天看點

openssl架構閑談--SSL實作

BIO 和EVP的一個應用就是SSL,沒有SSL這個應用,BIO或者EVP隻不過是一些底層的支撐接口,沒有任何的現實意義,正是SSL使用了BIO和EVP 的機制提供了一個已經成型的安全套接字的實作政策。其實想象一下,安全套接字有兩層含義,一層就是安全,這個由EVP接口實作了,另外一層含義就是套接 字,也就是說它必須是一個套接字,必須在操作的網絡協定棧上進行IO,這一層含義是在BIO接口展現的,這個意義上,SSL正是通過組合BIO和EVP來 實作安全套接字的,BIO除了提供底層的抽象接口之外并不和SSL存在别的方面的耦合,是以BIO可以單獨被使用,同樣的,EVP也是可以單獨被使用的。 

不過,繼續我們美妙的旅程之前首先要說的一點是,SSL本身就是一個BIO類型,并且是屬于過濾類型的,在它的下層必須有一個socket類型的源/目的類型的BIO,在openssl中自帶的sconnect執行個體中展現了這一點,建立過程如下: 

SSL_load_error_strings(); 

OpenSSL_add_ssl_algorithms(); 

ssl_ctx=SSL_CTX_new(SSLv23_client_method()); 

ssl=SSL_new(ssl_ctx); 

SSL_set_connect_state(ssl); 

ssl_bio=BIO_new(BIO_f_ssl()); 

BIO_set_ssl(ssl_bio,ssl,BIO_CLOSE); 

out=BIO_new(BIO_s_connect()); 

BIO_set_conn_hostname(out,host); 

BIO_set_nbio(out,1); 

out=BIO_push(ssl_bio,out);

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273626

繼續閱讀