Hysteria2 服务端自签证书 V2ray客户端指定证书指纹

前言

上一篇我们解决了 Hysteria2 客户端指定证书

现在我们来尝试用 V2ray作为客户端, 指定证书

文档


修改本地配置文件


试试.
报错.

尝试将日志中的 TeddTPwg0va7l8sJsBuTlrK6us6X+7GdxnssJ+JRuso= 写到配置文件中, 如下

测试成功.

分析

其实 4de75d4cfc20d2f6bb97cb09b01b9396b2babace97fbb19dc67b2c27e251baca 和 TeddTPwg0va7l8sJsBuTlrK6us6X+7GdxnssJ+JRuso= 本质上对应的原本的字节码是一样的. 只是前面那个是字节码转 hex, 后面是字节码转 base64.

在 Linux 上要得到 base64 格式的, 可以这样:
openssl x509 -in your_cert.crt -outform DER | sha256sum | awk '{print $1}' | xxd -r -p | base64
openssl x509 -noout -fingerprint -sha256 -in your_cert.crt | sed 's/^.*=//' | xxd -r -p | base64
其中
 | xxd -r -p | base64
的意思是, 从 hex 恢复成字节码, 再转 base64

总结

V2ray 客户端在对接服务端 Hysteria2 协议时, 可以指定证书的指纹, 但是要使用 base64 的形式.
形如,
{
  "protocol": "hysteria2",
  "settings": {
    "servers": [
      {
        "address": "服务.端.IP.地址",
        "port": 服务端口
      }
    ]
  },
  "streamSettings": {
    "network": "hysteria2",
    "security": "tls",
    "tlsSettings": {
      "pinnedPeerCertificateChainSha256": [
        "TeddTPwg0va7l8sJsBuTlrK6us6X+7GdxnssJ+JRuso="  // openssl x509 -noout -fingerprint -sha256 -in your_cert.crt | sed 's/^.*=//' | xxd -r -p | base64
        ],
      "allowInsecure": true
    },
    "hy2Settings": {
      "password": "密码"
    }
  }
}

后记

我本人对这方面并不了解, 分析原因的过程费了很长时间. 
我拿着 4de7....baca 和 Tedd....uso= 去问GPT,  GPT并没有给出有效的解决方案. 我虽然知道后面那个是base64, 但是base64解码并不能得到可打印字符, 我的思路就中断了.
然后我就去修改v2ray源码(感谢自己以前折腾过编译, 操作起来还挺顺的), 在日志中打印更多的信息,  尝试把从服务端获取的原始数据打印出来, 在和GPT的交流过程中, 偶然使用了 转hex 的方式打印, 这才发现从服务端拿到的数据没问题, 就是 4de7....baca  
然后我用肯定的语气告诉GPT, 我确定 4de7....baca  和 Tedd....uso=  数据没错, "你" 一定要找出来它们之间的关系. 并且把我的测试打印日志的代码也附上, GPT这才提示它们一个是 hex 一个是base64, 其实本质上的字节码是一样的.

评论

The Hot3 in Last 30 Days

酒馆SillyTavern 玩英文角色卡 也能以中文输出 设置世界书Lorebooks

搭 Docker版 Sub-Store订阅转换专家 带 http-meta 实现 集合订阅 测延迟 排序 筛选 生成新订阅 定时任务上传Gist