Conversation
|
|
|
也就是说像之前说的一样 pin 自签 CA 也还会用 SNI 验证证书和有效期了对吧 |
|
|
前提是没开allow insecure |
|
|
|
|
是这么设计的 如果pin ca 原根证书池会被替换 |
|
|
就是这里不太符合 |
这里的逻辑是这样的 |
但是 Go 自己的验证是基于系统 CA 而非 pinned CA,若有 pinned 则应只允许 pinned |
|
它会去找 里面到底有没有pinned ca 如果没有就直接失败 这里只是跳过多余的验证 |
|
但是 pinned CA 不一定在系统 CA 库里,用户 pinned 这个行为本身就代表了信任,没必要再去验证它是否在系统 CA 库里 还是改成统一的自动 allowInsecure 然后由 pinned 接管验证吧 |
|
就是遵循这个逻辑 #5532 (comment) 这个逻辑更清晰,文档也好写,以后还能完全删掉 allowInsecure |
|
我不是很喜欢自己包装逻辑 99%的用户都是有效证书再pin一下 这样够用( |
|
|
|
或者说比如,用户自己都知道 pin 的是 Let's Encrypt 的某一级证书,那么它在不在系统 CA 库中根本不重要,又不是不知道它是啥 |
|
|
|
|
|
这个改完后 |
|
@KobeArthurScofield Go 出 1.25.6 了,话说现在的 go.mod 是 1.25.5 是会导致自动编译用不上 1.25.6 吗 |
是,正常的 GitHub Actions setup-go 有这个缺陷 |
|
https://t.me/projectXray/4612634
|
|
可以,到 1.26 要记得换回来 看哪个比较好就用哪个就行 |
|
@Fangliding 似乎 有个小问题是貌似现在不支持同时 pin leaf 和 CA |
|
@KobeArthurScofield |
|
leaf和ca可以一起pin 不要发生一个链里同时有ca和leaf就行了 不然会比较麻烦 我觉得这种用例很少 |
效果上来看是,甚至写 stable 都可以
|
|
发下个版本时我把它顺便改为 1.25.6 吧,反正 Go 1.26 也快了 |
|
@Fangliding 它那个 certs 是什么顺序,我想了一下把 leaf 放开头就行了 |
|
有正的有反的( |
|
@Fangliding |
|
本来就是个勉强兼容的功能 我也想改成单个 再乱整我是觉得不太好 |
|
不是完全弄不了 就是得整成类似个最长匹配条目什么 找到ca不终止遍历 继续扫 扫到leaf直接回 没有leaf就返回找到ca 只是这样pin ca就必须全部扫完 有点笨比 |
|
@Fangliding 我本来写的是找到 leaf 后把它换到第一个,但如果 certs 顺序有正有反的话那直接 reverse 就行 |
|
@Fangliding 测一下 e7d7224 |
|
这个有go test的 过了应该就没啥问题 |
|
@Fangliding |
|
哦淦之前的逻辑交叉在一起了 删PinnedPeerCertificateChainSha256 不小心一块毙了 |
|
我把这两行加回去了 |
|
用我改的版本吧 d182cdd |
|
|
|
看到了 |
|
等我写个testca的吧 |
|
@Fangliding 我又想起了判断 VerifyPeerCertInNames 是否 nil 的真实原因是 RAW 那里可能把它置空,加了个注释防止别人改掉 |
和之前讨论的一样 不用写那个verifycertinpeer啥的了了