如果客户端使用 BIO_* 调用,是否需要在服务器上调用 BIO_*?

Are BIO_* calls on server required if the client uses BIO_* calls?

我正在尝试在 C 中实现一个简单的 OpenSSL client/server 模型,并且很好奇 BIO_* 调用的使用与原始 SSL_* 调用相比具有一些不错的功能。

我对此比较陌生,所以我可能完全看错了,但是否可以在客户端使用 BIO_* 调用,而不是在服务器上使用它?或者要建立连接,客户端和服务器都必须进行 BIO_* 握手?

首先,BIO的种类很多。 BIO 可用于访问本地磁盘文件(或其他 OS 文件,如串行端口)、普通(TCP 或 UDP)套接字或内存缓冲区,就好像它们是文件一样(例如,对于 PEM 格式但不在文件中的东西),以在线程之间进行通信,并通过加密、散列和编码对 "filter" 数据进行通信。您的问题似乎只涉及 类型 SSL.

的 BIO

是的,SSL BIO 只是一个包装器。在 SSL BIO 上使用 BIO_ 调用可以做的所有事情也可以通过 SSL_ 调用加上一些使用 sprintf、sscanf、strcat、memchr 等的内部数据操作来完成。特别是,没有任何东西 "on the wire"(已发送根据协商的 SSL/TLS 协议从对等端发送和接收)这是不同的,因为端点使用 BIO;使用 BIO 的端点可以与使用或不使用 BIO 的端点进行完全相同的通信,就像 OpenSSL 端点无论是 BIO 还是非 BIO 都可以与使用不同 SSL/TLS 实现而不是任何类型的 OpenSSL 的端点进行通信。