C/C++:我们何时以及为何需要在 TLS 客户端-服务器应用程序中调用 SSL_do_handshake()?

C/C++: When and why do we need to call SSL_do_handshake() in a TLS client-server application?

我创建了一个使用 TLS 相互通信的客户端-服务器应用程序。我已经使用非阻塞套接字并使用通用 OpenSSL 库函数来建立 TLS 通道和 IO 操作,即不在我的应用程序中的任何地方显式使用 BIO。应用程序在不调用 SSL_do_handshake() 方法的情况下正常工作..

我是 OpenSSL 的新手,最近在浏览文档时遇到了 SSL__do_handshake() 方法。我了解 SSL_do_handshake() 方法执行的操作。但是不清楚什么情况下需要调用...

据我了解,SSL_accept() 会在第一时间启动 TLS 握手。并在必要时调用 SSL_read() 和 SSL_write() 在内部重新协商 TLS 握手。

如果我的上述陈述是正确的,那么,为什么我们需要显式调用 SSL_do_handshake() 方法?

SSL_do_handshake 需要在应该完成 TLS 握手时调用。当使用 SSL_accept(服务器)或 SSL_connect(客户端)时,不需要显式调用 SSL_do_handshake,因为它已经在内部完成。类似的,如果应该使用 SSL_do_handshake,则不需要使用 SSL_acceptSSL_connect,只需相应地设置 SSL 状态(即客户端或服务器端)。

换句话说:它只是略有不同API,控制水平略有不同。一个可以用一个不用。