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);

你可能感兴趣的:(算法,框架,加密,socket,解密,ssl)