TLS config: Add pinnedPeerCertSha256; Remove pinnedPeerCertificateChainSha256 and pinnedPeerCertificatePublicKeySha256#5154
Conversation
|
|
|
顺便改成 Xray-core 内置 root 证书 net4people/bbs#526 (comment) 以及删掉 allowInsecure、用 PinnedPeerCertificateSha256 代替吧 |
|
PinnedPeerCertificateSha256 这个可以加进分享链接里 |
|
删了allowInsecure不太好吧 我有的时候本地测试都得开( |
|
((这里认为,将 |
本地测试也可以 PinnedPeerCertificateSha256 以前好像提过删掉 allowInsecure 这个选项,有人说有时候证书过期了,不开会失联,但现在都是 REALITY 了 |
|
这个东西到底不好提取 要不加个环境变量 XRAY_DEBUG 什么的然后从infra里检测没有这个flag就禁掉这个功能 也不用删代码 以后有其他可能危险的功能也可以加到底下 |
还有现在的两个 pin 选项都删了,统一改为 |
|
重构了大量有的没的把功能迁移走 |
9ebd6ad to
d418401
Compare
|
This is great work that should be continued. I can understand what RPRX would demand for delete "allowinsecure" option. But on the other hand I can also get 2dust's idea to put that in the sharing links (You never know what weird device end user gets and it does solve the problem for them) |
|
可以先不删 allowInsecure 但提示迁移 |
|
就从这个版本开始吧,弄个统一的 pin 并加到分享链接和 UI 中,给几个月的迁移时间,最后把 allowInsecure 删掉 公网未加密流量也是,会写个配置检测,提示迁移直至完全禁止,以及提示 SS/VMess 迁移至 VLESS Encryption |
|
不管allowInsecure和内置证书没关系的话这个可以直接用了 |
|
|
|
|
|
改名 PinnedPeerCertSha256 吧,配置名短一些,分享链接应该是 pcs |
|
|
@RPRX 加个xray ping target as sni有没有必要 |
没有 因为它本来就没有 但是我写了一个新的命令来计算 chrome证书查看器和crt.sh也可以直接查看
如果一张证书同时isca还包含san 它会被识别成ca 不过我猜这样一张混乱的证书没法通过后续的go verify流程 它的出现是个错误 |
|
还有一个问题 这个改之前的字段是一个数组 验证逻辑是满足任何一个就行了 我不知道有没有必要改成单个的 |
Co-authored-by: RPRX <[email protected]>
pinnedPeerCertSha256; Remove pinnedPeerCertificateChainSha256 and pinnedPeerCertificatePublicKeySha256
|
有点东西,好玩, |
|
理解能力也可以,我一开始打错了配置项名称它也能找到,并且一开始还保留了 * 和那个 trailing space,没有多管闲事挺好的 |
|
分隔符最终决定改成
|
|
我的意思是url防止被转义可以拼一块 json本来就是数组的最好还是别强行加个连字符改成单选项 |
|
我也想过这样有点怪,不过 VLESS 分享链接除了 URL 转义外似乎还没有过需要 UI 额外处理配置项的先例 并且这名字长得就不像数组,99% 的用例也只会填一项,加个 |
|
哎不对,ALPN 算是孤例吧,不过它的典型用例就是数组,还有 verifyPeerCertInNames 也是数组,不过它没有分享链接和 UI 支持 不过 v2rayNG 还没有搞过数组配置,对于 ALPN 的处理是给出几个选项而不是数组配置 对于 pinnedPeerCertSha256 这种典型用例为单个的,UI 搞个数组就更没必要了,要不就先保持这样,开个单个但兼容数组的先例 |
|
@Fangliding 文档写错了,不是 |
|
@Fangliding 或许设置了 |
|
自签证书毕竟是很少数 我觉得没啥必要 |
|
因为以后想把 |
|
|
|
这个选项最大的作用可能就是 设置成类似 |
|
|
|
pin leaf 和 pin CA 的区别是前者直接通过,后者仍会执行 name 和 time 验证对吧 |
|
重新验证是 VerifyPeerCertInNames 块里完成 要是只allowinsecure+pin ca那就只会看ca 因为不知道用哪个域名去验证 |
|
域名不是 SNI 填了吗 |
|
rand Carrier访问不到 而且没法处理IP证书 |
|
不对 应该可以 如果有需要的话可以把servername传进去 |
e86e0f9 |
新字段 PinnedPeerCertificateSha256 其为证书的sha256 为一个通用的证书指纹 chrome的证书查看器和crt.sh都以此作为证书的唯一标识符 类似这样 AE243D668EC9C7F74A0DCD1AD21C6676B4EFE30C39728934B362093AF886BF77 还有一种标识符是sha-1 Windows内置证书查看器是使用这个 crt.sh也有 但是觉得太旧而且混一起不方便就没用
PinnedPeerCertificateSha256 这个字段具有两个行为
指定的是叶子证书 → 同证书链hash会直接通过验证
指定的是CA证书 → 暂时通过 将当前被验证身份的CA添加到证书池中
全都没有就是失败(废话)
执行 VerifyPeerCertInNames 它会根据里面指定的name重新验证证书 但是如果 PinnedPeerCertificateSha256 指定了一个CA 那么它将把验证成功添加到CA池进行验证(用于自签名CA 比如自己签发一个CA 在 PinnedPeerCertificateSha256 指定自定义CA的指纹 然后在这里指定SNI)