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