c++ - 读取或写入 boost::asio::ssl::stream::next_layer() 是否绕过 SSL 解密/加密?

标签 c++ sockets ssl boost asio

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/

相关文章:

c++ - 如何让我的代码从矩阵输出非零元素?

c++ - 检查Linux中库中函数的存在

node.js - express ssl 地址

c++ - 运算速度

c++ - 具有虚拟析构函数的类的未使用 const 对象会导致段错误

java - 从 ObjectInputStream 读取仅在连接时返回对象

c - 如何从 WSAGetLastError() 检索错误字符串?

perl - 在 golang 中使用模板 "N/a* N/a*"解压由 perl 打包的缓冲区

ssl - 很多关于 http : TLS handshake error from <ip>:<port>: remote error: tls: bad certificate 的错误

python - 运行 pip 安装 : There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed