0%

使用 wolfssl 替换 openssl

使用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 握手时的选项。

BIOI/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 链,并在后面附加了一个连接类型的 BIO
  • BIO_get_ssl()是该函数返回 SSL 类型 BIO 的内部的 SSL 结构指针,得到该指针后,可以使用标志的 SSL 函数对它进行操作

Ref

  1. 换用 CyaSSL 库
  2. CHAPTER 13: OPENSSL COMPATIBILITY
  3. Top Reasons to use the wolfSSL patch in MySQL instead of yaSSL or OpenSSL