使用wolfssl
代替openssl
,以及部分接口介绍
wolfssl
以函数BIO_write
为例
$ ag BIO_write
cyassl/ssl.h
297:#define CyaSSL_BIO_write wolfSSL_BIO_write
wolfssl/ssl.h
537:WOLFSSL_API int wolfSSL_BIO_write(WOLFSSL_BIO*, const void*, int);
581:WOLFSSL_API int wolfSSL_BIO_write_filename(WOLFSSL_BIO *bio, char *name);
wolfssl/openssl/ssl.h
241:#define BIO_write wolfSSL_BIO_write
550:#define BIO_write_filename wolfSSL_BIO_write_filename
src/ssl.c
10795: static int wolfSSL_BIO_BIO_write(WOLFSSL_BIO* bio, const void* data,
10816: int wolfSSL_BIO_write(WOLFSSL_BIO* bio, const void* data, int len)
wolfssl
有两个适配层,一个是给cyassl
,一个是给wolfssl
,等价的
库文件
- openssl
- libssl.a
- libcrypto.a
- wolfssl
- libwolfssl.a
数据结构
SSL_CTX
用于 SSL 握手前的环境准备,设置 CA 文件和目录、设置 SSL 握手中的证书文件和私钥、设置协议版本以及其他一些 SSL 握手时的选项。
BIO
是I/O abstraction
。openssl 抽象 IO(I/O abstraction,即 BIO) 是 openssl 对于 io 类型的抽象封装,包括:内存、文件、日志、标准输入输出、socket(TCP/UDP)、加 / 解密、摘要和 ssl 通道等。Openssl BIO 通过回调函数为用户隐藏了底层实现细节,所有类型的 bio 的调用大体上是类似的。Bio 中的数据能从一个 BIO 传送到另外一个 BIO 或者是应用程序。
函数解读
SSL_library_init()
加载各种加密和 HASH 算法SSL_load_error_strings()
是加载 SSL 错误信息OpenSSL_add_all_algorithms()
是 SSL 初始化SSL_CTX_new
是申请 SSL 会话环境BIO_new_ssl_connect
是该函数创建一个包含 SSL 类型 BIO 的新 BIO 链,并在后面附加了一个连接类型的 BIOBIO_get_ssl()
是该函数返回 SSL 类型 BIO 的内部的 SSL 结构指针,得到该指针后,可以使用标志的 SSL 函数对它进行操作