Skip to content

Youtube MITM 失败 #38

Description

@jayli

代码版本:40395b0441f60faa9a64f2038d6d4ed00d1c73ae

MITM 证书问题调试小结

问题描述

启用 YouTube 广告拦截规则后,YouTube App 无法加载内容。关闭规则后正常工作。

已完成的排查

  1. 证书链结构
  • ✅ 已修复:叶子证书不再包含 rootCA(与旧版 anyproxy 一致)
  • ✅ 验证:grep -c "BEGIN CERTIFICATE" 结果为 1
  1. 证书类型
  • ✅ 已修改:从 ECDSA P-256 改为 RSA-2048
  • ✅ 验证:Public Key Algorithm: rsaEncryption, Public-Key: (2048 bit)
  1. 证书扩展字段
  • ✅ 已简化:只保留 Basic Constraints 和 SAN
  • ✅ 验证:与旧版 anyproxy 证书结构完全一致
  1. Subject 字段
  • ✅ 已修复:继承 rootCA 的完整 Subject(C, O, ST, OU, CN)
  • ✅ 验证:C=CN, O=AnyProxy, ST=SH, OU=AnyProxy SSL Proxy,
    CN=youtubei.googleapis.com
  1. CA 证书链配置
  • ✅ 已添加:createSecureContext 配置了 ca 参数
  • ✅ 验证:ca: certMgr.getRootCAFilePath()

当前问题

TLS 握手失败

  • 错误:socket hang up(客户端主动断开连接)
  • 现象:secureConnection 事件从未触发
  • 日志:连接建立后,客户端立即发送 socket hang up 错误

关键矛盾

  • 新旧两个证书的结构完全相同
  • 但旧版 anyproxy 可以正常工作
  • 新版证书客户端拒绝连接

未排查的领域

  1. TLS 握手细节
    - 加密套件选择
    - 证书链发送顺序
    - TLS 版本协商
  2. 服务端配置差异
    - secureOptions 参数
    - ALPN 协议配置
    - 其他 TLS 相关选项
  3. 网络层面
    - 抓包分析具体握手消息
    - 对比新旧版本的网络流量

建议下一步

  1. 抓包对比:使用 Wireshark 或类似工具,对比新旧版本的 TLS 握手流程
  2. 检查 secureOptions:对比新旧版本的 secureOptions 配置是否一致
  3. 简化测试:创建一个最小化的 HTTPS 服务器,只返回证书,看是否能握手成功

代码变更位置

  • /Users/hfy/jayli/block-proxy/proxy/proxy-core/cert-lifecycle.js - 证书生成逻辑
  • /Users/hfy/jayli/block-proxy/proxy/proxy-core/https-server-mgr.js - HTTPS
    服务器配置
  • /Users/hfy/jayli/block-proxy/proxy/proxy.js - rootCA 路径配置

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions