[Bug] Hysteria2 fingerprint 字段在转换为 Clash 格式时丢失

Author: cksdxz1007Created Apr 10, 2026Updated Apr 10, 2026

问题描述

转换 hysteria2 URI 时(如 hysteria2://password@host:port/?pinSHA256=xxx),生成的 Clash 配置中缺少 fingerprint 字段。

复现方式

  1. 使用包含 pinSHA256 参数的 hysteria2 订阅链接
  2. 通过 subconverter 转换为 Clash 格式
  3. 检查输出的 YAML,hysteria2 节点中没有 fingerprint 字段

对比

对比 proxyToSurge()proxyToClash()

proxyToSurge() (有 fingerprint):

cpp
case ProxyType::Hysteria2:
    if (!x.Fingerprint.empty())
        proxy["server-cert-fingerprint-sha256"] = x.Fingerprint;

proxyToClash() (漏掉):

cpp
case ProxyType::Hysteria2:
    singleproxy["ports"] >>= ports;
    singleproxy["up"] >>= up;
    // ... 其他字段
    // ❌ 没有写入 fingerprint
    break;

影响

导致 OpenClash 等客户端无法验证服务器证书指纹,存在中间人攻击风险。

环境

  • subconverter 版本: 最新
  • 客户端: OpenClash

期望

转换后的 Clash 配置中应包含 fingerprint 字段,与 Surge 格式一致。