You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost Beast安全WebSocket服务器:如何判断传入连接的TLS版本

判断Boost Beast安全WebSocket连接的TLS版本

要判断传入连接使用的TLS版本,不能通过boost::asio::ip::tcp::acceptor获取——acceptor仅负责TCP连接的监听与接收,此时TLS握手尚未开始,不存在任何TLS层面的信息。

正确的处理位置是通过boost::beast::websocket::stream内部的ssl_stream对象获取,具体时机是TLS握手完成之后(WebSocket握手前后均可,但建议在TLS握手完成后立即获取,方便后续业务逻辑做分支处理)。

具体实现步骤

  1. 从WebSocket流中取出底层的SSL流:

    auto& ssl_stream = ws.next_layer();
    

    这里的ws是你的boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::tcp_stream>>类型对象。

  2. 通过SSL流的原生句柄调用OpenSSL API获取版本信息:

    SSL* ssl_handle = ssl_stream.native_handle();
    
    // 获取可读的版本字符串(如"TLSv1.3"、"TLSv1.2")
    const char* tls_version_str = SSL_get_version(ssl_handle);
    
    // 获取版本常量数值(如TLS1_3_VERSION、TLS1_2_VERSION,需包含头文件<openssl/tls1.h>)
    long tls_version_num = SSL_get_protocol_version(ssl_handle);
    
  3. 根据版本信息分支处理业务逻辑:

    if (tls_version_num == TLS1_3_VERSION) {
        // 执行TLSv1.3专属业务逻辑
    } else {
        // 执行旧版本TLS的业务逻辑
    }
    

注意事项

  • 必须在ssl_stream.handshake(boost::asio::ssl::stream_base::server)成功返回后再调用上述API,否则获取到的信息无效。
  • 代码依赖OpenSSL库,编译时需确保链接OpenSSL并包含对应头文件。

内容的提问来源于stack exchange,提问作者Paul Grinberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:40:59