openssl框架閒談–SSL實現

科技小能手發表於2017-11-12
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


相關文章