使用 OpenSSL 与 libuv

主要观点:将基于简单阻塞套接字的代码迁移到使用 libuv 以允许每个线程有多个连接,同时使用 TLS,过程复杂且经历多次尝试。
关键信息:

  • 有关于此的 GitHub 项目,但对 libuv 和 OpenSSL 了解甚少,故自己编写 TLS 回显服务器来理解。
  • OpenSSL 有 BIO 抽象,整体思路是设置 libuv 接受连接、用服务器配置设置 OpenSSL 等。
  • 管理状态时,SSL_write可能需要先SSL_read再重试,同步调用时处理较 awkward,异步回调编程中状态管理多。
  • 意识到对 libuv 的方法有概念错误,libuv 基于循环思想,不同于标准异步编程。
  • 定义了一些结构体来组织系统,如connection_handler_ttls_uv_server_state_ttls_uv_connection_state_t等。
  • 构建 TLS 回显服务器的代码示例,包括连接创建、SSL 初始化、libuv 设置等,处理读写操作及处理重新协商等情况。
    重要细节:
  • complete_accept_ssl_flush等函数中处理 SSL 相关操作及状态管理。
  • on_new_connection等函数中处理新连接的接受、SSL 设置等。
  • handle_read等函数中处理读取数据及与 SSL 的交互。
  • check_if_need_to_flush_ssl_state等函数中处理 SSL 缓冲区的刷新和待处理写操作。
  • 代码示例中未处理错误,但展示了一个相对简洁的 TLS 回显服务器实现,约 350 行 C 代码。
阅读 2
0 条评论