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

使用Boost Asio读取SSL加密TCP套接字数据至末尾的问题

HTTPS代理SSL数据读取问题(基于Boost Asio)

我是C++新手,正在使用Boost Asio开发一款用于突破网络过滤的代理服务器,分为Agent和Server两部分:

  • Agent:负责接收客户端请求并转发至Server
  • Server:负责接收Agent请求并转发至源服务器

该代理对HTTP请求处理正常,但处理HTTPS请求时遇到问题。

请求流程

客户端通过HTTPS代理连接Agent → Agent将CONNECT请求Base64编码后放入HTTP POST请求体发送给Server → Server解码后建立与源服务器的连接,回复Agent连接成功 → 客户端开始SSL握手,此时问题出现。

尝试过的读取方法

  • 使用boost::asio::read_until按\r\n读取:SSL数据无此类结束标识,无法正常读取
  • 使用boost::asio::read搭配transfer_at_least(1):仅能读取部分数据(如部分Client Hello)
  • 使用transfer_all():需等待EOF,但连接未断开时无法触发
  • 逐字节循环读取:会长时间等待后续数据,无法判断何时停止

曾考虑解析SSL流的头部记录来判断数据结束,但实现难度极大。

更新说明

问题出在Agent读取客户端、Server读取源服务器的SSL数据时,无法判断数据结束。测试时设置代理后执行curl https://www.google.com,程序无法输出END,直到终止curl。

疑问

  1. 不解析SSL流是否能实现读取至数据末尾?
  2. Nginx等应用如何处理SSL请求?
  3. Boost是否适合该场景,还是应使用基础C++库?

临时方案

通过socket_.available()判断是否有剩余数据,但不可靠,最终可能需解析SSL头部记录。


内容的提问来源于stack exchange,提问作者Morteza Bashsiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:38:18