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:20888

http:
  listen: 127.0.0.1:20889

tls:
  insecure: true
  pinSHA256: a178a313215bd1db5f0256a7f56b23e97f00c2f89a7a47e42e36ad67e820131d

命令行跑一下试试.
报错
PS D:\GFW\hy2> .\hysteria-windows-amd64.exe
2025-11-10T12:24:22+08:00       INFO    client mode
2025-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:20888

http:
  listen: 127.0.0.1:20889

tls:
  insecure: true
  pinSHA256: 7fa7582952b83b182759a037b69feb3bb19b59865304e70c7817fddde7fbf643

就能正常跑起来了.

结论

服务端用
openssl x509 -in  certificate.crt -outform DER | sha256sum
生成 pinSHA256

========

后记

也许本来就知道是怎么一回事的人看起来我显得很"蠢", 连这点常识都不知道.
但, 我把这个过程记录下来, 是想让和我一样"小白"的读者看到, 用简单的工具和操作(浏览器, 命令行, 日志, 复制粘贴, GPT), 是可以解决问题的.

修改 极简一键脚本 就简单了, 已更新 

客户端 shadowrocket 已支持. 然后我就看到了应该使用的命令. 哈哈
openssl x509 -noout -fingerprint -sha256 -in your_cert.crt



评论

The Hot3 in Last 30 Days

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

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