boost::asio
库通过在 boost::asio::ssl::stream
装饰器类模板中包装套接字对象,为套接字上的 SSL 加密流量提供支持。例如:
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sslSocket;
ssl::stream
不支持 tcp::socket
的某些操作。调用 ssl::stream::next_layer
方法返回对包装对象的引用,这种方式不受 ssl::stream
支持,操作可以直接在包装对象上执行。
然而,对我来说,直接在包装的套接字对象上执行读写操作绕过 SSL 解密和加密似乎是合乎逻辑的,并且为了正确的 SSL 行为,在 sslSocket
上的读取和写入必须直接在包装上执行 ssl::stream
对象。
这是对的还是我可以自由的对被包裹的对象进行读写操作?
最佳答案
不仅使用底层套接字绕过了加密,还绕过了所有协议(protocol)。包括握手、(重新)协商、边信道、保活等。
没有任何实际保证它会工作。唯一可以预期工作的是在首次初始化任何 SSL 操作之前使用底层套接字。
除此之外,它就像将随机数据写入由 openssl 管理的套接字的文件描述符。
关于c++ - 读取或写入 boost::asio::ssl::stream::next_layer() 是否绕过 SSL 解密/加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567251/