重构部分证书pin逻辑
新字段 PinnedPeerCertificateSha256 改自PinnedPeerCertificatePublicKeySha256 不过没有break什么东西 因为后者从未出现在文档中出现过(故意不写的 因为被我发现的时候我觉得不太好) 其为证书的sha256 为一个通用的证书指纹 chrome的证书查看器和crt.sh都以此作为证书的唯一标识符 类似这样 AE243D668EC9C7F74A0DCD1AD21C6676B4EFE30C39728934B362093AF886BF77 还有一种标识符是sha-1 Windows内置证书查看器是使用这个 crt.sh也有 但是觉得太旧而且混一起不方便就没用
从现在开始
证书链hash具有最高优先级 会无视其他选项 因为它精确指定了证书
然后会尝试验证 PinnedPeerCertificateSha256 这个字段具有两个行为 指定的是叶子证书 → 同证书链hash会直接通过验证 指定的是CA证书 → 暂时通过 将当前被验证身份的CA添加到证书池中 全都没有就是失败(废话)
执行 VerifyPeerCertInNames 它会根据里面指定的name重新验证证书 但是如果 PinnedPeerCertificateSha256 指定了一个CA 那么它将把验证成功添加到CA池进行验证(用于自签名CA 比如自己签发一个CA 在 PinnedPeerCertificateSha256 指定自定义CA的指纹 然后在这里指定SNI)
~虽然老 break proto 不是很好 不过这个应该可以替换掉原来的选项 一是用 pb 的发现 hash 对不上可以有机会重新配置 二是不用日后清理 而且这个功能只在 release note 出现过~
顺便改成 Xray-core 内置 root 证书 https://github.com/net4people/bbs/issues/526#issuecomment-3298222483
以及删掉 allowInsecure、用 PinnedPeerCertificateSha256 代替吧
PinnedPeerCertificateSha256 这个可以加进分享链接里
删了allowInsecure不太好吧 我有的时候本地测试都得开(
((这里认为,将allowInsecure改为环境变量或命令行参数,或许更好呀))
删了allowInsecure不太好吧 我有的时候本地测试都得开(
本地测试也可以 PinnedPeerCertificateSha256
以前好像提过删掉 allowInsecure 这个选项,有人说有时候证书过期了,不开会失联,但现在都是 REALITY 了
这个东西到底不好提取 要不加个环境变量 XRAY_DEBUG 什么的然后从infra里检测没有这个flag就禁掉这个功能 也不用删代码 以后有其他可能危险的功能也可以加到底下
这个东西到底不好提取
./xray tls cert 顺带输出 sha256 不就行了,再扩展一下 ./xray tls ping 让它输出各级 sha256(或许 InsecureSkipVerify)
还有现在的两个 pin 选项都删了,统一改为 PinnedPeerCertSha256 就行了,留着重复功能的话代码逻辑上较复杂
重构了大量有的没的把功能迁移走 自定义证书库参考我之前写的 https://github.com/XTLS/Xray-core/pull/3897/files 它们不太好管理 并且好像没有官方公开的这样的list可供拉取 火狐发布的是他们专有的格式 curl有一个他们自动转换的pem证书 但是是绑一起的只能一块加载 并且还有一个要不要把中国背景CA踹掉的问题 周围很多人喜欢这么干但是我个人还是倾向相信证书透明度监管而不是基于国家背景的简单判断 今天国安局明天CIA都得防着那大家不如别用CA都用预共享去算了