Hysteria2 服务端自签证书 客户端指定证书
前言
最近翻墙圈的氛围是研究服务端自签证书时, 客户端最好固定证书以避免中间人攻击.

理论支持
Hysteria2文档
Hysteria2 服务端
问GPT, 计算证书的sha256
openssl dgst -sha256 certificate.crt
所以我的就是
openssl dgst -sha256 /etc/ssl/private/learn.microsoft.com.crt
得到
SHA2-256(/etc/ssl/private/learn.microsoft.com.crt)= a178a313215bd1db5f0256a7f56b23e97f00c2f89a7a47e42e36ad67e820131d
Hysteria2 客户端
配置文件照着上面文档说的来, 就是
server: 服务.端.IP.地址:服务端口auth: 密码socks5:listen: 127.0.0.1:20888http:listen: 127.0.0.1:20889tls:insecure: truepinSHA256: a178a313215bd1db5f0256a7f56b23e97f00c2f89a7a47e42e36ad67e820131d
命令行跑一下试试.
报错
PS D:\GFW\hy2> .\hysteria-windows-amd64.exe2025-11-10T12:24:22+08:00 INFO client mode2025-11-10T12:24:23+08:00 FATAL failed to initialize client {"error": "connect error: CRYPTO_ERROR 0x12a (local): no certificate matches the pinned hash"}
把上面的操作过程向GPT描述一遍, 给了一些解决方案, 不行.
分析
那么, 我们从源码入手.
打开 hy2 源码
https://github.dev/apernet/hysteria
* 对, 就是把 github.com 改为 .dev
搜刚刚日志中的关键字 no certificate matches the pinned hash 找到
再把源代码复制粘贴去问GPT.
GPT 给了新的方案
再试试
服务端
openssl x509 -in /etc/ssl/private/learn.microsoft.com.crt -outform DER | sha256sum
得到
7fa7582952b83b182759a037b69feb3bb19b59865304e70c7817fddde7fbf643 -
修改客户端配置文件
server: 服务.端.IP.地址:服务端口auth: 密码socks5:listen: 127.0.0.1:20888http:listen: 127.0.0.1:20889tls:insecure: truepinSHA256: 7fa7582952b83b182759a037b69feb3bb19b59865304e70c7817fddde7fbf643
就能正常跑起来了.
结论
服务端用
openssl x509 -in certificate.crt -outform DER | sha256sum
生成 pinSHA256
========
后记
也许本来就知道是怎么一回事的人看起来我显得很"蠢", 连这点常识都不知道.
但, 我把这个过程记录下来, 是想让和我一样"小白"的读者看到, 用简单的工具和操作(浏览器, 命令行, 日志, 复制粘贴, GPT), 是可以解决问题的.
openssl x509 -noout -fingerprint -sha256 -in your_cert.crt




评论
发表评论