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, 其实本质上的字节码是一样的.




评论
发表评论